[Django][The PyBo][Chap 1] 기본 기능 구현
Info Notice:
안녕하세요. HwanSeok입니다. The PyBo 프로젝트는 점프 투 장고를 참조하여 진행됩니다. 본 포스팅은 전체적인 개발 흐름과 The Pybo 프로젝트를 효과적으로 이해하기 위한 설명이 포함되어 있습니다.
개발 과정
앱 추가
1
$ django-admin startapp pybo
config/urls.py와 pybo/urls.py의 관계
config/urls.py 파일에서 pybo/에 대한 처리를 한 상태에서 pybo/urls.py 파일이 실행되므로 첫 번째 매개변수에 pybo/가 아닌 빈 문자열(‘‘)을 인자로 넘겨줍니다.
config/urls.py | pybo/urls.py | 최종 URL | ||
---|---|---|---|---|
‘pybo/’ | + | '' | = | ‘pybo/’ |
Database 설정
- psycopg2 설치 (migrate 실행에 필요한 모듈)
1
$ pip install psycopg2
- PostgreSQL 다운로드 및 PostgreSQL Root 계정 생성
- 데이터 베이스 생성
1
CREATE DATABASE 데이터베이스 이름;
- 위에서 생성한 데이터베이스를 관리할 user, password 지정
1
CREATE USER user_id WITH PASSWORD 'password';
- 인코딩, isolation, timezone 설정
1 2 3
$ ALTER ROLE user_id SET client_encoding TO 'utf8'; $ ALTER ROLE user_id SET default_transaction_isolation TO 'read committed'; $ ALTER ROLE user_id SET TIME ZONE 'Asia/Seoul';
- USER에게 데이터베이스 접근 권한 주기
1
GRANT ALL PRIVILEGES ON DATABASE 데이터베이스 명 To user_id;
- /mysite/setting.py Database 편집
1 2 3 4 5 6 7 8 9 10
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.postgresql', 'NAME': 'mysite', 'USER': '******', 'PASSWORD': '******', 'HOST': 'localhost', 'PORT': '', } }
csrf_token
{% csrf_token %}는 form 엘리먼트를 통해 전송된 데이터(답변)가 실제로 웹 브라우저에서 작성된 데이터인지 판단하는 검사기 역할을 한다. 그러므로 <form …> 태그 바로 밑에 {% csrf_token %}을 항상 입력해야 한다. 해킹처럼 올바르지 않은 방법으로 데이터가 전송되면 서버에서 발행한 csrf_token값과 해커가 보낸 csrf_token값이 일치하지 않으므로 오류를 발생시켜 보안을 유지할 수 있다.
login redirect to next url
로그인 후 redirect 될 url은 아래의 순서대로 설정됩니다.
- 1순위: 요청된 폼의 필드 중 next라는 이름을 가진 필드의 값
- 2순위: url의 query parameter 중 next 라는 이름을 가진 값
- 3순위: 설정파일에 설정된 LOGIN_REDIRECT_URL 변수로 설정된 값 (기본값: ‘/accounts/profile/’)
각 기능 별 수행 흐름
사이트 접속
- 웹 브라우저 : localhost:8000/pybo 입력
- 웹 브라우저 : 장고 개발 서버에 /pybo 페이지 요청
- config/urls.py : pybo/views.py 파일의 index 함수 호출.
- pybo/urls.py : /pybo 경로이기 때문에 ‘‘와 연결된 index view 호출.
- pybo:index view : GET.get(‘page’,’1’)
- pybo:index view : Qustion object query
- pybo:index view : paginate object
- pybo:index view : render pybo/question_list with args
Success Notice: 위와 같은 과정을 거쳐 처음에 보았던 결과 페이지를 생성하였습니다. 수고하셨습니다.
개발환경
- window 10
- python 3.6.8
- django 3.1.5
Leave a comment