django-admin startproject mysite
python manage.py runserver

CTRL-Cmysite라는 폴더 안으로 들어가 실행해야 하는 것 같다
python manage.py startapp polls

💡 우리가 연 서버 url에 polls라는 App을 만들고, 접속될 수 있도록 연결한 뒤 Hello, World를 출력하도록 한다.

→ 요청한 페이지를 찾을 수 없었다. 필요한 url은sing the URLconf defined in
mysite.urls, Django tried these URL patterns, in this order:
- admin/
mysite.urls.py 에서 정의하면 된다!mysite.urls.py 에서 polls와 연결해주기from django.urls import path, include
urlpatterns = [
# polls와 연결해주는 것
# url에 polls/로 들어오면 그것에 대한 처리는 polls.urls에서 처리하도록!
path('polls/', include('polls.urls')),
path("admin/", admin.site.urls),
]polls.urls.py 에서 접속할 경우 보일 페이지를 views에서 처리하도록 하기from django.urls import path
from . import views
urlpatterns = [
# 아무것도 안 붙어 들어오면 views.index에서 처리하라
path('', views.index, name='index')
]polls.views.py 에서 Hello, World가 출력될 수 있도록 만들기from django.http import HttpResponse
def index(request):
return HttpResponse("Hello, world.") 
💡 polls 하위에 some_url 이라는 페이지를 띄우기 위해 경로 설정하기
polls/urls.pyfrom django.urls import path
from . import views
urlpatterns = [
# 아무것도 안 붙어 들어오면 views.index에서 처리하라
path('', views.index, name='index'),
# some_url이 붙어 오면 views.some_url에서 처리하라
path('some_url', views.some_url)
]
polls/views.pyfrom django.http import HttpResponse
def index(request):
return HttpResponse("Hello, world.")
def some_url(request):
return HttpResponse("Some url을 구현해 봤습니다.")모델 생성 (question, choice)
polls.model.py# 질문들을 저장
class Question(models.Model):
# 질문 (최대 길이 200)
question_text = models.CharField(max_length=200)
pub_date = models.DateTimeField('date published')
# 각 옵션을 저장
class Choice(models.Model):
# 각 옵션(choice)은 질문에 딸려있는 것.. -> question을 FK로
question = models.ForeignKey(Question, on_delete=models.CASCADE)
# 선택한 텍스트 (최대 길이 200)
choice_text = models.CharField(max_length=200)
# 투표한 번호
votes = models.IntegerField(default=0)
migration 파일 생성하기
서버에서 migration 이란?
- 데이터베이스 스키마를 변경하거나 업데이트하는 프로세스
- 설치된 app에 따라 migration 만들기
mysite.setting.py
```python
INSTALLED_APPS = [
"polls.apps.PollsConfig",
...
]
```
$ python manage.py makemigrations polls

migration으로 실행될 SQL 문장 살펴보기
$ python manage.py sqlmigrate polls 0001

migration 실행하기
$ python manage.py migrate

더 돌리면 더이상 실행할 migration이 없다고 한다

🔗 django 공식 document
https://docs.djangoproject.com/en/5.0/
polls/models.py 수정# 질문들을 저장
class Question(models.Model):
# 질문 (최대 길이 200)
question_text = models.CharField(max_length=200)
pub_date = models.DateTimeField('date published')
# 테스트용 임시 필드
is_something = models.BooleanField(default=False)
average_score = models.FloatField(default=0.0)python manage.py makemigrations 
python manage.py migrate 
sqlite3 db.sqlite3 
SELECT * FROM django_migrations 
.schema polls question 
.exit : sqlite 터미널 종료테스트용으로 추가한 필드를 삭제하는 것은 마지막 마이크레이션을 취소하고 돌아가는 것과 같다
마이그레이션 0001 버전으로 롤백
python manage.py migrate polls 0001

sqlite3 터미널에서 스키마 확인하기


python [manage.py](http://manage.py/) createsuperuser







polls/admin.pyfrom django.contrib import admin
from .models import *
# Register your models here.
admin.site.register(Question)
admin.site.register(Choice) 브라우저 상에서 잘 등록된 것을 볼 수 있다 
코드상으로 등록했던 필드대로 question object를 만들 수 있다


__str__() 로 수정할 수 있다
question로 보이게
# 질문들을 저장
class Question(models.Model):
# 질문 (최대 길이 200)
question_text = models.CharField(max_length=200)
pub_date = models.DateTimeField('date published')
# 자기 자신을 문자열로 표현할 때 어떻게 표현할 것인가?
# question을 문자열로 표현할 때 question_text를 보이라는 것
def __str__(self):
return self.question_text

def __str__(self):
return f"제목: {self.question_text}, 날짜: {self.pub_date}" 
# 질문들을 저장
class Question(models.Model):
# 질문 (최대 길이 200)
question_text = models.CharField(max_length=200)
pub_date = models.DateTimeField('date published')
score = models.FloatField(default=0)
is_something_wrong = models.BooleanField(default=False)
json_field = models.JSONField(default=dict)
# 자기 자신을 문자열로 표현할 때 어떻게 표현할 것인가?
# question을 문자열로 표현할 때 question_text를 보이라는 것
def __str__(self):
return f"제목: {self.question_text}, 날짜: {self.pub_date}"



model.py 에서 추가했던 코드, migration 파일 삭제