urls.py
목차
1. 고객이 요청할(request가 들어올) 때, urls.py에서 어떻게 인자를 받는가
2. urls.py에서 view를 실행할 때, FBV & CBV 차이점
3. urls.py 관련 자주 사용되는 장고 내장 함수들
// urls.py
from django.conf.urls import url
from . import views
urlpatterns = [
path('example/<int:pk>/', views.example_view, name='example'),
# re_path(r'^example/(?P<value>\d+)/$', views.example_view, name='example'),
path('example/<int:pk>/', ExampleView.as_view(), name='example'),
]
호출가능한 개체가 path()에 들어있다.
views.example_view는 함수이므로 호출가능한 개체이다.
ExampleView.as_view()도 그 자체로 호출가능한 개체이다. '.as_view()'가 호출가능한 개체를 만든 뒤, 반환하기 때문이다.
url에서 설정한 값들은 view.py를 실행하는 과정에서 사용된다.
1번째 인자는 request 개체를 전달한다. 정확히는 HttpRequest 개체이다.
2번째 인자는 URL Captured Values이다. 말 그대로 url에서 얻어낸 값을 전달하는 것이다.
// views.py - FBV
from django.shortcuts import render
from django.http import HttpResponse
def example_view(request, value):
return HttpResponse(f'Captured value: {value}')
// view.py - CBV
from django.http import HttpResponse
from django.views import View
class ExampleView(View):
def get(self, request, value):
return HttpResponse(f'Captured value: {value}')
from django.urls import path
from .views import DashboardView, dashboard
urlpatterns = [
path('fbv/', action, name='fbv'),
path('cbv/', Action.as_view(), name='cbv'),
]
FBV : () 없음 : 함수가 직접 호출 가능하므로 ()가 없이 사용
CBV : () 있음 : as_view()로 인스턴스를 생성하고, 메서드를 호출하여 뷰 함수를 만듦
from django.urls import reverse_lazy
reverse_lazy() : 선언할 때 사용