책과 논문/파이썬 웹 프로그래밍

3 튜토리얼 따라하기 - 설문조사 (1)

B612 2022. 5. 8. 17:47

3.1 사이트 기능 살펴보기

사용자 화면

  • 투표 목록
  • 투표 화면
  • 투표 결과

관리자 화면

  • 투표 목록
  • 투표 작성 및 수정

3.2 설문조사 서비스 만들기

3.2.1 프로젝트 만들기

pip install django

장고 설치

 

django-admin startproject config .

장고 프로젝트 생성

 

3.2.3 설문조사 앱 만들기

python manage.py startapp polls

 

3.2.4 첫 번째 뷰 만들기

 

polls/views.py 파일에 코드 입력

1
2
3
from django.http import HttpResponse
def index(request):
    return HttpResponse("hello world")
cs

뷰를 만든 후에는 호출하기 위한 URL이 필요함. URL 연결을 위해 polls 폴더에 urls.py 파일 생성

 

urls.py 파일에 코드 입력

1
2
3
4
5
from django.urls import path
from . import views
urlpatterns = [
    path('', views.index, name='index'),
]
cs

polls 폴더에 있는 urls.py는 앱의 라우팅만 담당. 프로젝트의 메인 urls.py 파일에서 연결을 해줘야 정상 동작함.

 

따라서 config/urls.py 파일을 아래와 같이 수정함.

1
2
3
4
5
6
7
from django.contrib import admin
from django.urls import path, include
 
urlpatterns = [
    path('polls/', include('polls.urls')),
    path('admin/', admin.site.urls),
]
cs

include는 다른 urls.py 파일을 참조할 수 있도록 함.

...polls/list/ 라는 주소로 접속하면 polls/까지는 일치하기 때문에 잘라내고 나머지 list/ 부분만 polls/urls.py에서 찾아보는 방식으로 동작함.

 

python manage.py runserver

여기까지의 결과물

3.2.5 데이터베이스 만들기

config/settings.py에는 데이터베이스 관련 설정이 있다.

[ENGINE]은 어떤 종류의 데이터베이스를 사용할지 설정하는 부분이다.

  • django.db.backends.sqlite3
  • django.db.backends.postgresql
  • django.db.backends.mysql
  • django.db.backends.oracle

4가지 종류의 데이터베이스를 사용할 수 있다.

 

python manage.py migrate

데이터베이스를 만들고 초기화 하기 위한 명령어

 

3.2.6 모델 만들기

모델은 데이터베이스의 구조도이다.

보통 models.py에 작성하고 클래스 형태이다.

 

polls/models.py 에 아래 코드를 입력한다.

1
2
3
4
5
6
7
8
9
from django.db import models
 
class Question(models.Model):
    question_text = models.CharField(max_length=200)
    pub_date = models.DateTimeField('date published')
class Choice(models.Model):
    question = models.ForeignKey(Question, on_delete=models.CASCADE)
    choice_text = models.CharField(max_length=200)
    votes = models.IntegerField(default=0)
cs

장고의 모델은 [models.Model]을 상속받아 만든다.

모델을 완성했으니 데이터베이스에 적용해야 한다.

이때 사용하는 명령인 migrate를 사용하려면 polls 앱이 현재 프로젝트에 설치되어 있음을 알려줘야 한다.

 

config/settings.py 파일의 [INSTALLED_APPS] 변수 제일 윗줄에 polls 앱을 추가한다.

1
2
3
4
INSTALLED_APPS = [
    'polls.apps.PollsConfig',
    ...
]
cs

(polls 앱 폴더에 있는 apps.py 파일에 있는 PollsConfig 클래스를 의미)

 

python manage.py makemigrations polls

데이터베이스에 적용

 

python manage.py sqlmigrate polls 0001
python manage.py migrate polls 0001

변경사항을 데이터베이스에 반영하기 위한 명령 

데이터베이스에 테이블을 생성하고 초기화 할 수 있음

 

3.2.7 모델에 함수 추가하기

[Question] 모델과 [Choice] 모델에 [__str__] 메서드를 추가함.

해당 메서드는 관리자 화면이나 쉘에서 객체를 출력할 때 나타날 내용을 결정함.

 

[was_published_recently] 메서드도 추가한다. 이 메서드가 잘 동작하도록 datetime과 timezone도 import 한다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
import datetime
 
from django.db import models
from django.utils import timezone
 
class Question(models.Model):
    question_text = models.CharField(max_length=200)
    pub_date = models.DateTimeField('date published')
    def __str__(self):
        return self.question_text
    def was_published_recently(self):
        return self.pub_date >= timezone.now() - datetime.timedelta(days=1)
 
class Choice(models.Model):
    question = models.ForeignKey(Question, on_delete=models.CASCADE)
    choice_text = models.CharField(max_length=200)
    votes = models.IntegerField(default=0)
    def __str__(self):
        return self.choice_text
cs

 

 

 

+) 아직 튜토리얼은 끝나지 않았다

+) 이번 챕터는 장고 튜토리얼을 따라한 것이기 때문에 코드를 공개해 놓았다. 다음 챕터부터는 책의 내용이기 때문에 코드를 올려놓을 수 없다

+) 책의 오타가 좀 많다

'책과 논문 > 파이썬 웹 프로그래밍' 카테고리의 다른 글

2 장고 시작하기  (0) 2022.05.07