시작하는 중

Django - 장고의 url 처리, MTV 본문

Django/정리

Django - 장고의 url 처리, MTV

싱욱 2022. 10. 6. 11:07

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')

requesthttps://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 (.)을 통해 변수 속성에 접근할 수 있음

  1. views.py에서 context = {key:value} 형태로 선언하고
  2. urls.py에서 views의 함수를 호출하고
  3. 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