웹 풀 프레임워크 - Django tutorial
공식 튜토리얼 차근차근 따라가며 진행해보기!
https://docs.djangoproject.com/en/5.1/intro/tutorial01/
---------------------------------------------------------------------
[0. 가상환경 및 라이브러리 설치]
$ cd <my directory>
$ python -m venv .venv
$ pip install Django
$ source .venv/bin/activate
$ pip list
---------------------------------------------------------------------
[1. Django 기본 파일 구조 만들기]
$ django-admin startproject mysite
$ cd mysite
$ python manage.py startapp polls
$ python manage.py migrate
$ python manage.py runserver
---------------------------------------------------------------------
[2. 앱의 urls / views를 설정]
from django.http import HttpResponse
def index(request):
return HttpResponse("Hello, world. You're at the polls index.")
# mysite/polls/views.py
=> urls(/polls/) 의 주소에 접속 하였을 때 실행할 함수(index)를 정의 ; 보통 시각적으로 보여 줄 것들
from django.urls import path
from . import views
urlpatterns = [
path("", views.index, name="index"),
]
# mysite/polls/urls.py
=> urlpatterns로 URL *라우팅* 시스템을 정의
* 특정한 URL 패턴을 정의하고, 이 패턴에 맞는 URL 요청이 들어오면 그에 맞는 뷰 함수나 뷰 클래스를 실행
from django.contrib import admin
from django.urls import include, path
urlpatterns = [
path("polls/", include("polls.urls")),
path("admin/", admin.site.urls),
]
# mysite/mysite/urls.py
=> 최상위 경로에서 URL 라우팅 시스템 정의
=> include 함수를 사용하여 다른 형태의 urls 라우팅을 관리할 수 있음
---------------------------------------------------------------------
[3. Activating models / Migration]
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/polls/models.py
=> ORM(Object-Relational Mapping)을 사용하여 데이터베이스 모델을 정의한 것
=> Django의 모델 클래스를 사용하여 설문 질문(Question)과 선택지(Choice)를 데이터베이스에 저장하기 위한 구조를 정의
INSTALLED_APPS = [
"polls.apps.PollsConfig",
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
]
# mysite/mysite/settings.py
=> "polls.apps.PollsConfig" 을 INSTALLED_APPS의 리스트 안에 추가
=> Django 프로젝트에 polls 앱을 추가하기 위한 것
# polls 앱 내의 모델 변경 사항을 감지하고, 그에 따라 데이터베이스 스키마를 정의 / 검토
$ python manage.py makemigration polls
$ python manage.py sqlmigrate polls 0001
# 데이터베이스에 해당 변경 사항을 반영하여 테이블을 생성하거나 수정
$ python manage.py migrate
---------------------------------------------------------------------
[4. Playing with the API]
## 데이터 베이스와 상호작용하는 기본적인 방법
$ python manage.py shell
>>> from polls.models import Choice, Question
>>> Question.objects.all()
>>> from django.utils import timezone
>>> q = Question(question_text="What's new?", pub_date=timezone.now())
>>> q.save()
>>> q.id
## q 객체의 question_text 필드를 확인 및 수정하는 방법
>>> q.question_text
>>> q.pub_date
>>> Question.objects.all()
>>> q.question_text = "What's up?"
>>> q.save()
>>>Question.objects.all()
<QuerySet [<Question: Question object (1)>]>## Question.objects.all().delete() : Question 전부 지우기
=> <QuerySet [<Question: Question object (1)>]> 는 객체를 설명하는 데 충분하지 않음 ; 그래서 models.py를 편집
=> Django shell의 편집은 필수적인 것은 아니지만, 데이터 베이스와의 상호작용은 확인하기 위해 필요함.
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
# mysite/polls/models.py
=> Question, Choice 클래스에 __str__ 함수를 추가해주고, Question에 time zone 기능을 넣어줌
=> __str__ : 객체의 메모리 주소 대신 문자열이 출력됨. ex) Question_text 출력
---------------------------------------------------------------------
[5. Introducing the Django Admin 관리자 계정 설정]
$ python manage.py createsuperuser
#Username: admin
#Email address: admin@example.com
#Password: **********
#Password (again): *********
#Superuser created successfully.
$ python manage.py runserver
=> 관리자 계정 만들기 : admin site(/admin/)에서 login 가능
from django.contrib import admin
from .models import Question
admin.site.register(Question)
# mysite/polls/admin.py
=> admin site에서 Question을 수정하고 등록할 수 있도록 함.
---------------------------------------------------------------------
[6. Writing more views 페이지 뷰 설정]
from django.http import HttpResponse
def index(request):
return HttpResponse("Hello, world. You're at the polls index.")
def detail(request, question_id):
return HttpResponse("You're looking at question %s." % question_id)
def results(request, question_id):
response = "You're looking at the results of question %s."
return HttpResponse(response % question_id)
def vote(request, question_id):
return HttpResponse("You're voting on question %s." % question_id)
# mysite/polls/views.py
from django.urls import path
from . import views
urlpatterns = [
path("", views.index, name="index"),# ex: /polls/
path("<int:question_id>/", views.detail, name="detail"),# ex: /polls/5/
path("<int:question_id>/results/", views.results, name="results"),# ex: /polls/5/results/
path("<int:question_id>/vote/", views.vote, name="vote"),# ex: /polls/5/vote/
]
# mysite/polls/urls.py
'Code-note' 카테고리의 다른 글
[문제리뷰] 수식 최대화 -python (programmers,Lv2) (0) | 2024.12.29 |
---|---|
[자료구조] 이진 탐색 트리(BST) 기본 개념 -python (0) | 2024.12.17 |
[프로젝트] snake 게임 만들기 -python (2) | 2024.10.05 |
[프로젝트] PingPong 게임 만들기 -python (8) | 2024.10.05 |
[프로젝트] BlackJack 구현 - python (2) | 2024.10.01 |