urls.py/urlpatterns 리스트에 매핑된 호출 가능한 객체
함수도 "호출 가능한 객체" 중의 하나
크게 2가지 형태의 뷰
함수 기반 뷰 (Function Based View) : 장고 뷰의 기본.
클래스 기반 뷰 (Class Based View)
HttpRequest 객체 및 URL Captured Values
현재 요청에 대한 모든 내역을 담고 있다.
url/re_path 를 통한 처리에서는 → 모든 인자는 str 타입으로 전달
path 를 통한 처리에서는 → 매핑된 Converter의 to_python에 맞게 변환된 값이 인자로 전달
# urls.py
urlpatterns = [
path('<int:pk>/', views.post_detail),
]
# views.py
def post_detail(request, pk):
pass
HttpResponse 객체
django.shortcuts.render 함수는 템플릿 응답을 위한 shortcut 함수
장고 디폴트 설정에서 str 문자열을 utf8로 인코딩해준다.
def post_list(request):
qs = Post.objects.all()
q = request.GET.get('q', '')
if q:
qs = qs.filter(message__icontains=q)
return render(request, 'instagram/post_list.html', {
'post_list' : qs,
'q': q,
})
def post_detail(request, pk):
response = HttpResponse()
response.write("Hello World")
return response
Item 목록 보기
# myapp/views.py
from django.shortcuts import render
from shop.models import Item
def item_list(request):
qs = Item.objects.all()
return render(request, 'shop/item_list.html', {
'item_list': qs,
})
# myapp/urls.py
from django.urls import path
urlpatterns = [
path('items/', item_list, name='item_list'),
]
Item 목록 보기
#views.py
from django.views.generic import ListView
from shop.models import Item
item_list = ListView.as_view(model=Item)
#urls.py
from django.urls import path
urlpatterns = [
path('items/', item_list, name='item_list'),
]
#views.py
from django.views.generic import ListView
from shop.models import Item
class ItemListView(ListView):
model = Item
item_list = ItemListView.as_view()
#urls.py
from django.urls import path
urlpatterns = [
path('items/', item_list, name='item_list'),
]
프로젝트/settings.py에서 최상위 URLConf 모듈을 지정
매칭되는 URL Rule이 없을 경우, 404 Page Not Found 응답을 발생
# shop/urls.py
from django.urls import path, re_path
from shop import views
urlpatterns = [
path('', views.item_list, name='item_list'), # Item 목록
path('new/', views.item_new, name='item_new'), # 새 Item
path('<int:id>/', views.item_detail, name='item_detail'), # Item 보기
re_path(r'^(?P<id>\d+)/$', views.item_detail, name='item_detail'), # 혹은 re_path 활용
path('<int:id>/edit/', views.item_edit, name='item_edit'), # Item 수정
path('<int:id>/delete/', views.item_delete, name='item_delete'), # Item 삭제
path('<int:id>/reviews/', views.review_list, name='review_list'), # 리뷰 목록
path('<int:item_id>/reviews/<int:id>/edit/$', views.review_edit, # 리뷰 수정
name='review_edit'),
path('<int:item_id>/reviews/<int:id>/delete/$', views.review_delete, # 리뷰 삭제
name='review_delete'),
]
앱 내 urls.py를 생성하고 등록
# 앱/urls.py
from django.urls import path
from 앱이름 import views
app_name = '앱이름'
urlpatterns = [
]
# 프로젝트/urls.py
from django.contrib import admin
from django.urls import include, path
urlpatterns = [
path('admin/', admin.site.urls),
path('앱이름/', include('앱이름.urls')),
]