======================= 大爽歌作,made by big shuang =======================
一 URL與View關係
參考:https://docs.djangoproject.com/en/2.2/topics/http/urls/#how-django-processes-a-request
1- Django處理請求(request)過程
簡單概括如下:
- 根據
ROOT_URLCONF
(位於setting.py
)選擇對應的url解析模塊(默認是urls.py
) - 加載上一步找到的url解析模塊(默認是
urls.py
)查找變量urlpatterns
- 按順序遍歷
urlpatterns
裏面的urlpattern,返回第一個匹配requested URL的urlpattern - 上一步匹配成功,Django就會導入並調用urlpattern裏面對應的視圖view(一般在
views.py
裏面) - 第三步沒有找到匹配的,或者尋找的過程中有異常拋出,Django會調用適當的錯誤處理視圖(見error-handling)
上面步驟的一些細節補充:
- urlpattern: 變量
urlpatterns
裏面的元素,稱作urlpattern,urlpattern必須爲django.urls.path()
實例或django.urls.re_path()
實例,例如
urlpatterns = [
path('articles/2003/', views.special_case_2003),
re_path(r'^articles/(?P<year>[0-9]{4})/$', views.year_archive),
re_path(r'^articles/(?P<year>[0-9]{4})/(?P<month>[0-9]{2})/$', views.month_archive),
......
]
- 有一些老的教程資源裏面urlpattern寫成
url('articles/2003/', views.special_case_2003)
[在開頭會from django.conf.urls import url
],
這種寫法不推薦使用,django.conf.urls.url()
是django.urls.re_path()
的別名。在將來的版本中,它可能會被棄用.(出自https://docs.djangoproject.com/en/2.2/ref/urls/#url) - 視圖view,可以看做一個簡單的Python函數,這個方法會根據一個
HttpRequest
實例(對應輸入參數request
),返回一個HttpResponse
實例。
request
爲視圖view一定要有的參數,根據需要,urlpattern也有可能給視圖view添加其他輸入參數。