일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 추천프로젝트
- til
- 비전공자 멋쟁이사자처럼
- 비전공자 코딩교육
- 멋쟁이사자처럼 k 디지털
- 가브리엘마르케스
- 인터뷰
- 비전공자 코딩
- k 디지털 후기
- AI 국비지원
- 멋쟁이사자처럼 전액국비지원
- 리뷰
- 이렇게 그녀를 잃었다
- 멋사 국비지원과정
- 멋쟁이사자처럼
- 영화추천시스템
- 문학동네
- 멋쟁이사자처럼 k-digital
- 영화AI추천
- 멋사 AI
- 인생책
- AI 코딩
- k 디지털
- 인생책짧은글
- 홍명희 임꺽정
- 유니오르
- 멋사 k 디지털
- 민음사
- 멋사 AI 교육
- 멋사 전액국비지원교육
- Today
- Total
글쟁이, 코딩한다
0204 / k_digital 41일차 / 웹프로그래밍(Django) 본문
0.
웹 프로그래밍 중
오늘 한 일 :
1) Django로 만든 로컬 기반 사이트를 일반 도메인에 공개. Github와 PythonAnywhere를 이용
2) 두 번째 사이트 만들기. 설문조사 사이트.
깃Git과 깃허브Github
Git
소스코드 저장소 ; 버전 정리가 편리하다
온라인 Git 저장소 Github에 작업물을 올리는 과정
- git bash에서 cd 명령어로 프로젝트 폴더에 접근
- git init : 프로젝트 폴더 안에 .git 폴더 생성 # git status : git 상태 확인
- git add . : 프로젝트 폴더 안 모든 작업물들을 스테이지 위로 올린다
- git commit -m "commit" : 커밋(버전) 등록 ; 로컬 저장소에 등록 ; #권장 커밋 메시지를 확인해보자(명령형, 점 빼기 ... )
- git remote add origin 깃허브 URL : 깃허브 URL과 로컬 저장소를 연결
- git push -u origin master(main) : 폴더 안 내용들을 깃허브에 저장
Github 용어들
#branch : 개인 작업 환경. master(main) 브런치에서 일정 부분 떼내어 작업하고 추후 다시 원본으로 합친다.
#README.md : 내가 올린 repository(project)를 설명하는 markdown 파일
#.gitignore : 폴더 내 가리고 싶은 파일 설정
#fork : 원격 저장소를 그대로 복사해 내 저장소에 사본을 만든다
##개인 작업에서는 로컬이 메인이 되도록! github에서 바로 파일을 올리거나 수정하기보다는 로컬에서 작업한 것을 올리도록 <-> 협업에서는 github 코드가 메인.
PythonAnywhere
Django 작업물을 온라인 상에 배포하도록 도와주는 사이트. 용량이 낮은 결과물은 일정 기간 배포가 무료다.
작업물 배포 과정
- 새 프로젝트 만들기 : web탭 -> Add a new web app -> manual configuration 선택 -> python 3.7 (my version) ! 링크가 제공
- 깃허브와 이어주기 : consoles탭 -> Bash 콘솔 선택-> 초기화 이후 git clone "github url" (github code clone)
- 가상환경 구동 : consoles탭 ->(연결)virtyalenv --python=python3.7(내 파이썬 버전) my_env(내 작업 가상환경)-> (구동)source my_env/bin/activate ->(장고 설치) pip install django==version
- 작업 폴더로 이동 : consoles탭 -> cd my directory(내 파일)
- manage.py 명령어 수행 : 1-collectstatic 2-migrate 3-createsuperuser(이름, 메일, 비밀번호 입력) #실제 제대로 올릴 때는 static 폴더, DB 파일을 빼고 올린다. 따라서 makemigration도 진행한다
- 배포용 Setting 수정 : files탭 -> 내 작업 폴더로 이동 -> settings.py -> secret_key 변경(임의로 수정) -> DEBUG=True로 -> ALLOWED_HOSTS=['내 계정.pythonanywhere.com']으로 #이 세가지는 Public 배포시 늘 수정해야 한다
- 가상환경 연결 : web탭 -> Virtualenv : 로 이동 -> " /home/계정이름/가상환경 이름 " 등록
- WSGI 수정 : web탭 -> Code: -> WSGI configuration file: -> wsgi.py를 미리 준비한 코드로 변경
- Reload : web-> Reload: -> 아래 초록 버튼 누르기
=> Browser를 열고 (내 계정.pythonanywhere.com)로
수정작업순서 : local -> github로 push -> anywhere에서 pull
# WSGI 수정 코드 :
장고걸스 튜토리얼: https://tutorial-extensions.djangogirls.org/ko/manual_pythonanywhere_deploy#wsgi
## WSGI : 웹 요청이 들어올때 보안 등을 위해 쓰는 게이트? 파이썬 앱이 웹 서버와 통신하기 위한 수단 : request를 받아들이고 처리해 response를 내보내는 통로 ; 많은 리퀘스트를 한번에 다룰 수 있다, 경로 지정, 스타일 전처리
New Project
설문조사 사이트 생성
기본적으로 로또 번호 생성 사이트와 같은 프로세스를 거치기에 새로 알아볼만한 부분들만 정리한다.
가상환경 -> 프로젝트 생성 -> 앱 생성 -> setting 조정
1- url 권한 위임
=> 일정 앱 url 뒤에 오는 변화는 모두 해당 앱 폴더에서 감당하도록 위임
apps/ 폴더 뒤에 오는 모든 url은 apps 폴더 내 urls.py가 감당(포함)하도록 한다
path('apps/', include('apps.urls'))
2- model(DB) 짜기
#DB를 짜기 전에는 어딘가에 직접 구조를 그려보거나 조작하고 해보자
#ForiegnKeys : 다른 테이블 항목을 빌려오기
##models.ForeignKey ##(on_delete=models.CASCADE)로 빌려온 테이블 수정도 이어받을 수 있다.(sql ON CASCADE 명령어)
#python manage.py sqlmigrate 폴더이름 DB이름 ex. apps 0001 : 클래스를 만들때 django가 적용하는 SQL 명령문을 살펴볼 수 있다.
3- shell(명령 프롬프트(cmd)에서 Table 확인&생성하기)
Shell로 Table 항목 살펴보기
q = Question(question_text = "What's the best treatment?", pub_date = timezone.now())일 때
Class.objects.all( ) : 테이블(클래스) 전체 항목 확인
Question.objects.get(pk=1) : 테이블에서 pk가 1인 항목 확인
Question.objects.get(pk=1).column : 테이블에서 pk가 1인 항목의 column 내용 확인 #불러온 내용을 변수에 저장하는 것도 가능 ## 해당 변수로 클래스 내 함수들을 실행해도 좋다
Question.objects.filter(column__startswith='hey') : startswith 등 필터 연산도 가능하다
Question를 찍어낸 객체 object(q)는 [<Question : Question object (1)>] 형태로 나타난다. 무슨 이야기인지 알아보기가 어려움. 이를 눈에 보이도록 표현하는 것이 str 함수. 클래스에 추가한다.
또 다른 테이블 Choice에 객체 q로 만든 열과 Foreignkey 연결된 항목이 있다.
이때 q.Choice_set.all( ) 함수를 쓰면 객체 q와 연결된 Choice 항목을 모두 가져온다
q.Choice_set.create( )로 항목을 생성하기도 한다.
4-에러 페이지 대응
일어날 수 있는 에러들을 모두 한 페이지로 몰아둔다.
방법 1.
from django.shortcuts import get_object_or_404
#제대로 작동하면 문제없이 진행, 에러가 나면 모두 404 에러 페이지로 몰아둔다.
question = get_object_or_404(Question, pk=question_id)
방법2.
from django.http import Http404
try:
question = Question.objects.get(pk=question_id)
except Question.DoesNotExist:
raise Http404('question {} does not exist'.format(question_id))
# raise : 특별한 변화가 없더라도 뒤에 따라오는 에러를 일으킨다. 모두 404 페이지로 모으기
#추후 404 에러페이지는 따로 template을 만들어준다. 에러페이지 대응도 웹사이트를 만들 때 중요.
5-url 패턴 자동 생성
html 파일 안에서 하드코딩 대신 url 패턴을 집어넣어준다
url은 굉장히 길어지거나 복잡해지기 쉬워서 그대로 집어넣으면 파일이 지저분해지기 쉽다. urls.py에서 전체 도메인 자체를 변수 하나로 받아주고(app_name = 'apps'), html에서 연결할 특정 주소(detail)와 관계('apps:detail')지어준다. 이어 urls.py에서 지정한 변수(detail을 결정해줄 question.id)도 연달아 집어넣어준다.
'나는 코딩도 한다 > TIL' 카테고리의 다른 글
0208/ k_digital 43일차/ 웹 프로그래밍(Django) (0) | 2021.02.08 |
---|---|
0205 / k_digital 42일차 / 웹 프로그래밍(Django) (2) | 2021.02.05 |
0203 / k_digital 40일차 / 웹 프로그래밍(Django) (0) | 2021.02.03 |
0202 / k_digital 39일차 / 웹 프로그래밍(Django) (0) | 2021.02.02 |
0201 / k_digital 38일차 / 세미프로젝트3(마무리) (0) | 2021.02.01 |