[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 설정

  1. psycopg2 설치 (migrate 실행에 필요한 모듈)
    1
    
      $ pip install psycopg2 
    
  2. PostgreSQL 다운로드 및 PostgreSQL Root 계정 생성
  3. 데이터 베이스 생성
    1
    
      CREATE DATABASE 데이터베이스 이름;
    
  4. 위에서 생성한 데이터베이스를 관리할 user, password 지정
    1
    
      CREATE USER user_id WITH PASSWORD 'password';
    
  5. 인코딩, 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';
    
  6. USER에게 데이터베이스 접근 권한 주기
    1
    
      GRANT ALL PRIVILEGES ON DATABASE 데이터베이스  To user_id;
    
  7. /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/’)

각 기능 별 수행 흐름

사이트 접속

  1. 웹 브라우저 : localhost:8000/pybo 입력
  2. 웹 브라우저 : 장고 개발 서버에 /pybo 페이지 요청
  3. config/urls.py : pybo/views.py 파일의 index 함수 호출.
  4. pybo/urls.py : /pybo 경로이기 때문에 ‘‘와 연결된 index view 호출.
  5. pybo:index view : GET.get(‘page’,’1’)
  6. pybo:index view : Qustion object query
  7. pybo:index view : paginate object
  8. pybo:index view : render pybo/question_list with args

Success Notice: 위와 같은 과정을 거쳐 처음에 보았던 결과 페이지를 생성하였습니다. 수고하셨습니다. :+1:

개발환경

  • window 10
  • python 3.6.8
  • django 3.1.5

Leave a comment