======================= 大爽歌作,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添加其他输入参数。