시작하는 중
Django - 장고의 url 처리, MTV 본문
url의 정의를 보면
https://developer.mozilla.org/ko/docs/Glossary/URL
URL - 용어 사전 | MDN
URL(Uniform Resource Locator)은 인터넷에서 웹 페이지, 이미지, 비디오 등 리소스의 위치를 가리키는 문자열입니다.
developer.mozilla.org
URL(Uniform Resource Locator)은 인터넷에서 웹 페이지, 이미지, 비디오 등 리소스의 위치를 가리키는 문자열입니다.
지금 이 글의 url을 살펴보면

HTTPS는 프로토콜이고
mystack.tistroy.com/ 까지는 도메인라는 것이고 33은 경로이다.
더 나아가서 포트라는 것과 매개변수, 부분식별자도 있다.
django 서버를 열다보면 계속 보게되는 것이 있는데
Django version 3.2.13, using settings 'crud.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CTRL-BREAK.
여기서 127.0.0.1:8000/ 을보면 127.0.0.1은 호스트 :8000은 port이다.
mystacks.tistory.com 뒤에도 사실 :443이 숨겨져 있다.
https 프로토콜을 사용하면 기본적으로 443번 포트를 사용하고 http 프로토콜을 사용하면 80번 포트를 사용한다.
url에 적혀져 있는 것
1. 도메인
쉽게 서버 HOST IP라고 생각하면 된다. IP를 알기쉬운 이름으로 바꾼 것이 도메인이고 웹페이지를 제공하는 곳
2. 포트
IP 주소가 가르키는 기기에 접속할 수 있는 통로
3. 경로
추가적인 정보 -> 지금 이 글은 내 티스토리의 33번째 글이라는 것이다.
Django url.py 작동 방식
경로에 따라 분기처리하는 것이다.
# urls.py
urlpatterns = [
path('admin/', admin.site.urls),
path('index/', views.index),
]
기본적으로 url의 경로에 admin/으로 접속하면 관리자 사이트로 이동하고
index/로 접속하면 views라는 모듈의 index함수가 실행된다는 것이다.
# urls.py
urlpatterns = [
path('admin/', admin.site.urls),
path('index/', views.index, name='index'),
]
name=을 붙여서 해당 url의 이름을 붙여서 후에 편하게 처리할 수 있다.
VIEWS
# views.py
from django.shortcuts import render
def index(request):
return render(request, 'index.html')
request는 https://docs.djangoproject.com/en/4.1/ref/request-response/
Request and response objects | Django documentation | Django
Django The web framework for perfectionists with deadlines. Overview Download Documentation News Community Code Issues About ♥ Donate
docs.djangoproject.com
여기를 보면 페이지가 요청되면 django는 요청에 따른 메타데이터를 포함하는 객체를 생성하는데 이것이 HttpRequest이다.
HttpRequest의 인스턴스가 바로 request이고 이를 views.py에 선언되는 함수의 첫번째 인자(argument)로 request가 전달된다.
render
render(request, template_name, context)
두번째 인자로 template을 넘기는데 MTV 패턴의 T에 해당되는 것으로써 보여지는 부분에 해당되고 템플릿 파일을 가르킨다.
context는 데이터를 dictionary 형태로 만들어서 템플릿에서 사용할 수 있게 해줌
즉, render은 template 파일을 context라는 데이터와 함께 넘기게 되는 것!
Templates
실제 내용을 보여주는데 사용되는 폴더고 이 안쪽의 확장자를 html로 가지는 파일들을 views.py의 render함수를 통해 웹 페이지로 보여지게 된다.
# settings.py
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [ BASE_DIR / 'templates', ],
'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',
],
},
},
]
settings.py 의 일부 중 템플릿에 관한 설정 코드이다.
APP_DIRS : True는 각각의 앱 디렉토리 안쪽의 templates에서 템플릿 파일을 찾아보라는 것이고
DIRS의 list에 다른 디렉토리를 적어두면 다른 디렉토리로 설정 가능하다.
DTL - Django Template Language
파이썬 코드와 매우 유사하지만 사실은 파이썬 코드로 실행되는 것은 아니다.
파이썬처럼 조건문, 반목문, 변수 치환 등의 기능이 있다.
1. 변수 사용하기
# views.py
def greeting(request):
foods = ['apple','orange','banana']
info = {'name':'vinitus'}
context = {
'foods' : foods,
'info' : info
}
return render(request, 'greeting.html', context)
#urls.py
path('greeting/', views.greeting)
#greeting.html
<body>
<h1>안녕하세요, {{info.name}}</h1>
<p>좋아하는 과일은 {{foods.0}}
</body>
dot (.)을 통해 변수 속성에 접근할 수 있음
- views.py에서 context = {key:value} 형태로 선언하고
- urls.py에서 views의 함수를 호출하고
- templates/*.html에서 {{key}}형태로 불러올 수 있음
2. 태그
반복, 조건논리 연산을 수행하여 제어를 만드는 등의 복잡한 연산 수행
{% tag %}
{% if %}{% endif %}
{% for %}{% endfor %}
3. 템플릿 상속
# 부모 HTML
{% block content %}
{% endblock content %}
# 자식 HTML
{% extends '부모.html' %}
{% block content %}
다른 내용들
{% endblock content %}
'Django > 정리' 카테고리의 다른 글
Django Class Based View (0) | 2022.10.24 |
---|---|
Django - 장고란 (0) | 2022.10.06 |
Django - 장고 시작하기 (명령어) (0) | 2022.10.06 |
Django - 디자인 패턴 (0) | 2022.10.06 |