文章目录
1. Django如何处理HttpRequest请求
当一个用户请求Django服务器的一个页面时,其urls查找路径为:
- Django从根URLconf模块查找,这是ROOT_URLCONF设置的值,如果传入 HttpRequest对象具有urlconf 属性,则将使用其值代替 ROOT_URLCONF设置。
- Django加载Python模块并查找项目中的变量 urlpatterns。
- Django依次匹配每个URL模式,在与请求的URL匹配的第一个模式停下来;如果项目中没有且设置了路由分发,则项目中找完后进入到应用中查找,查到与请求的URL匹配的第一个模式停下来,无匹配则报错。
- 一旦其中一个URL模式匹配成功,Django就会导入并调用该url对应的视图函数,其中视图传递以下参数:
. 一个HttpRequest实例。
. 如果匹配的URL模式未返回任何命名组,则正则表达式中的匹配将作为位置参数提供。
. 关键字参数由路径表达式匹配的任何命名部分组成,path/re_path/kwargs参数中指定的任何参数覆盖。
2. 路由配置
URLconf是url路径到views视图函数的一个映射。
2.1简单的路由配置
Django文档中一个简单的URLconf例子:
from django.urls import path
from . import views
urlpatterns = [
path('articles/2003/', views.special_case_2003), # 后台special_case_2003函数不需要传参
path('articles/<int:year>/', views.year_archive), # 后台year_archive函数需要传1个参数来接收url中的year
path('articles/<int:year>/<int:month>/', views.month_archive),# 后台month_archive需要传2个参数来接收url中的year和month
path('articles/<int:year>/<int:month>/<slug:slug>/', views.article_detail