투표 앱 생성하고, View 작성하기
투표 앱 생성하기, 다음과 같이 해당 디렉터리에 polls가 생성됨
$ python manage.py startapp polls

polls/view.py에 아래 내용 추가
- URL 경로에 매핑될 뷰 함수인 index를 정의
- index 함수는 "Hello, world. You're at the polls index."라는 HTTP 응답을 생성
from django.http import HttpResponse
def index(request):
return HttpResponse("Hello, world. You're at the polls index.")

polls/urls.py에 아래 내용 추가
- /를 views.py의 index와 연결
- “”은 애플리케이션의 루트 경로에 해당
from django.urls import path
from . import views
urlpatterns = [
path("", views.index, name="index"),
]

mysite의 urls.py에 polls.urls 추가하기
- 요청 URL이 polls/로 시작할 경우, polls.urls 파일에서 정의된 URL 패턴을 참조함
- 예시) 사용자가 http://<서버주소>/polls/로 접속하면, polls.urls의 패턴을 탐색하여 적절한 뷰를 호출
from django.contrib import admin
from django.urls import include, path
urlpatterns = [
path("polls/", include("polls.urls")),
path("admin/", admin.site.urls),
]

서버 실행하고, localhost:8000/polls/에 접속하면, views.index에서 return한 HTTP 응답이 출력됨
$ python manage.py runserver

Django db 설정
mysite/settings.py에서 DATABASES 부분 수정
- RDS 생성할 때 지정했던 접속 정보를 입력
- https://doodo0126.tistory.com/167 << 해당 링크 참고해서 RDS 생성

psycopg2 종속성 추가하기
- postgresql 사용하려면 필요
$ uv add psycopg2-binary
migrate 명령으로 앱 구동에 필요한 데이터베이스 테이블을 생성
$ python manage.py migrate
DBeaver로 확인해보면, 다음과 같은 테이블이 생성됨

Error: pg_config executable not found 발생 시

pg_config가 없어서 발생하는 오류

터미널 가서 postgresql 설치
$ brew install postgresql
pg_config가 생성됨, psycopg2-binary 종속성 추가하면 정상적으로 실행됨

Model 만들기
Model이란? Django에서 데이터베이스 테이블을 표현하는 클래스
- 데이터베이스의 구조를 정의하고, 데이터를 저장하고 쿼리하는데 사용됨
- 이를 통해 SQL 쿼리를 직접 작성하지 않고, Python 메서드를 사용해 데이터베이스와 상호작용하는 것이 가능함 → 이를 ORM(Object-Relational Mapping)라고 함
polls/models.py에 Question과 Choice model을 생성
- Question의 필드: question_text(질문), pub_date(발행일)
- Chocie의 필드: question(Question model과 연결), choice_text(선택 텍스트), votes(투표 집계)
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)

mysite/settings.py에서 INTALLED_APPS에 “polls.apps.PollsConfig”을 추가
- 앱을 현재의 프로젝트에 포함하는 것으로, 마이그레이션 할 때 INSTALLED_APPS의 설정을 확인하고 필요한 테이블을 생성함
INSTALLED_APPS = [
"polls.apps.PollsConfig",
"django.contrib.admin",
"django.contrib.auth",
"django.contrib.contenttypes",
"django.contrib.sessions",
"django.contrib.messages",
"django.contrib.staticfiles",
]

마이그레이션 파일 생성하기
- 해당 앱의 모델을 기반으로 마이그레이션 파일을 생성함
$ python manage.py makemigrations polls

polls/migrations에 마이그레이션 파일(0001_initial.py)이 생성됨

어떤 식으로 DB에 Model이 저장되는가? migration하면, 0001_initial.py가 쿼리문으로 변환되어 DB에 요청이 가고, Model이 DB에 저장됨
- sqlmigrate 명령으로 마이그레이션 파일이 어떤 쿼리문으로 변경되는지 확인해 볼 수 있음
$ python manage.py sqlmigrate polls 0001

마이그레이션 진행하면, 다음과 같이 새로운 테이블이 생성됨
$ python manage.py migrate

polls_choice 테이블의 필드

polls_question 테이블의 필드

참고:
https://docs.djangoproject.com/en/5.1/ref/settings/#std-setting-DATABASES
'Language > Python' 카테고리의 다른 글
[Python] Django Model, View 사용하기 (0) | 2024.12.17 |
---|---|
[Python] Django 투표 앱 만들기 (2) (0) | 2024.12.17 |
[Python] Django 프로젝트 생성하기 (1) | 2024.12.17 |
[Python] 네이버 카페 게시글 크롤링 selenium, bs4 (0) | 2023.09.09 |
[Python] 데이터프레임 합치기, 중복 행 제거 (0) | 2021.02.24 |