내가 보려고 만든 django 분석 - 1 (urls)

sihwan_e·2021년 5월 28일
0

Django

목록 보기
13/21

urls

요약
django.urls.path() 함수는 path(route, view, kwargs=None, name=None) 와 같이 4개의 파라미터를 받아들일 수 있는데, 처음 2개의 파라미터는 반드시 있어야 하고, 뒤의 2개는 옵션.

main - urls.py
--------------

from django.urls import path, include

urlpatterns = [
    path('user/', include('user.urls')),
    path('item/', include('item.urls')),
    path('review/', include('review.urls')),
    path('order/', include('order.urls')),
    path('store/', include('store.urls')),
]
order app - urls.py
-------------------

from django.urls import path

from order import views

urlpatterns = [
    path('cart', views.CartView.as_view(), name='order-cart'),
    path('request', views.OrderView.as_view(), name='order-request')
]
item - urls.py
--------------

urlpatterns = [
    path('teashop/list', views.ItemListView.as_view(), name='item-list'),
    path('teashop/detail/<int:item_id>', views.ItemDetailView.as_view(), name='item-detail')
]

path()

django.urls.path() 함수는 path(route, view, kwargs=None, name=None) 와 같이 4개의 파라미터를 받아들일 수 있는데, 처음 2개의 파라미터는 반드시 있어야 하고, 뒤의 2개는 옵션이다.

첫번째 파라미터 : URL route에서 사용된 경로를 지정한다.
path() 함수의 첫번째 파라미터인 URL 패턴은 완전한 경로를 표시한다.
'accout/login'으로 경로를 지정하면, 이는 '/accout/login/' 경로를 의미한다.

두번째 파라미터 : 해당 URL에 상응하는 View를 지정하는 것이다.
두번째 파라미터에서 View를 지정하는 방식으로는 함수 뷰(function view)의 이름을 지정하거나
클래스에 기반한 View (class based view)의 경우 "클래스명.as_view()"와 같이 지정한다.
이 때 생성된 객체에서 dispatch 메서드를 호출하여 GET, POST를 파악하고 매칭되어 연결된다.

세번째 파라미터 : Dictionary 형식의 아큐먼트를 옵션으로 지정할 수 있다.

네번째 파라미터 : path 이름을 지정한다.(path명으로부터 URL 패턴 정보를 찾는 URL Reversing 을 위해 흔히 사용된다)
함수의 경로 데이터에 대한 정보를 나중에 사용하기 위해 임의로 지정해두는것이다.

path() 함수의 좀 더 복잡한 표현으로 URL 파라미터로부터 특정 정보를 읽어내는 방법에 대해 알아보자. 예를 들어, 피드백 Id가 URL 상에 있다고 했을 때, 이 Id를 알아내기 위해 URL 패턴을 "feedback/" 혹은 Id가 숫자인 경우 명시적으로 "feedback/<int:id>", "teashop/detail/<int:item_id>"와 같이 지정할 수 있다. 여기서 "id","item_id" 는 views.py에 전달되는 파라미터명이다.

include()

include() 함수는 다른 URLconf들을 참조할 수 있도록 해준다. Django가 함수 include()를 만나게 되면, URL의 그 시점까지 일치하는 부분을 잘라내고, 남은 문자열 부분을 처리를 위해 include 된 URLconf로 전달하게 된다.

as.view()

클래스형 뷰 사용시 클래스로 진입하기 위해 제공되는 진입 메소드

  1. as_view() 메소드에서 클래스의 인스턴스를 생성한다.
  2. 생성된 인스턴스의 dispatch() 메소드를 호출한다.
  3. dispatch() 메소드는 요청을 검사해서 HTTP의 메소드(GET, POST)를 알아낸다.
  4. 인스턴스 내에 해당 이름을 갖는 메소드로 요청을 중계한다.
  5. 해당 메소드가 정의되어 있지 않으면, HttpResponseNotAllowd 예외를 발생시킨다.
profile
Sometimes you gotta run before you can walk.

0개의 댓글