<aside>
💡 docs tutorial을 보면서, 내가 새롭게 알게된 것 위주로 정리합니다.
+
원하는대로 커스텀 해보기!
https://docs.djangoproject.com/ko/4.1
</aside>
python [manage.py](<http://manage.py>) runserver [port_number]
위의 경고메시지를 없애기 위해! migrate를 해주면 됨!
db engine 변경: SQLite → MySQL
SQLite 를 데이터베이스로 사용하지 않는 경우,
USER
,PASSWORD
,HOST
같은 추가 설정이 반드시 필요합니다. [docs link]
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql', # 사용할 db 엔진 설정
'NAME': 'tutorialdb',
'USER': 'tutorialuser',
'PASSWORD': 'devpassword',
'HOST': '127.0.0.1',
'PORT': '3306', # mysql default portnum
}
}
LANGUAGE_CODE = 'ko-kr'
TIME_ZONE = 'Asia/Seoul'
USE_I18N = True
USE_L10N = True
USE_TZ = False # True 인 경우 디폴트로 미국 시간 사용. False 로 변경해 주어야 설정한 시간대로 변경됨.
요기는 mysql 설치 완료된 뒤에!
터미널에서 python [manage.py](<http://manage.py>) shell 명령어를 통해
view.py에서 입력 후 서버에서 볼 수 있었던 부분을 즉각적으로 볼 수 있다!
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)
__str__()
메소드를 추가하는 이유
: 객체의 표현을 대화식 프롬프트에서 편하게 보기 위해
: Django 가 자동으로 생성하는 관리 사이트(/admin) 에서도 객체의 표현이 사용되기 때문python manage.py createsuperuser
URL로부터 뷰를 얻기 위해, Django는 ‘URLconfs’
라는 것을 사용합니다. URLconf는 URL 패턴을 뷰에 연결합니다.
templates
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [],
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
],
},
},
]
DjangoTemplates
**은 각 INSTALLED_APPS
디렉토리의 “templates” 하위 디렉토리를 탐색합니다.→ 우리는 polls app 하위에 templates 디렉토리를 만들어줬으니, django는 이제 탐색 후 여기를 참고할 것이다!
→ 만약 react(front)+django(back)의 구조로 개발하고 싶다면 아래 링크를 참고하기!
상위 계층에서 ObjectDoesNotExist
예외를 자동으로 잡아 내는 대신, get_object_or_404()
도움 함수(helper functoin)를 사용하거나, Http404
를 사용하는 이유는 무엇일까요?
왜냐하면, 모델 계층을 뷰 계층에 연결하는 방법이기 때문입니다. Django의 중요한 설계 목표는, **약결합(loose coupling)**을 관리하는 데에 있습니다. 일부 제어된 결합이 django.shortcuts
모듈에서 도입되었습니다.
# 1)
try:
question = Question.objects.get(pk=question_id)
except Question.DoesNotExist:
raise Http404("Question does not exist")
# 2)
question = get_object_or_404(Question, pk=question_id)
urls.py에서 path()함수의 name인수를 설정해줌으로써, html에서 {% url %}
template 태그를 사용하여 url 설정에 정의된 특정한 URL 경로들의 의존성을 제거할 수 있다.
# urls.py
path('<int:question_id>/', views.detail, name='detail'),
# .html
not
<li><a href="/polls/{{ question.id }}/">{{ question.question_text }}</a></li>
but
<li><a href="{% url 'detail' question.id %}">{{ question.question_text }}</a></li>
보다 상세뷰
<li><a href="{% url 'polls:detail' question.id %}">{{ question.question_text }}</a></li>