-- django的url规则
django的路由系统
当一个请求来到时
1.首先到项目目录下的urls.py (根URLconf模块)中,查找路由规则
2.根URLconf模块,里面定义了urlpatterns变量
3.urlpatterns是一个(django.urls.path,django.urls.re_path 对象)列表
4.按顺序运行每个url模式。在第一个匹配的模板停止
5.一旦匹配,django 导入并调用给定的视图
6.如果中间出错,或者没有匹配到,返回404
-- path方法,捕获参数,路径转换器
-path(route,view,kwargs=None,name=None)
-route 是一个字符串的url规则
-view 是一个视图
- kwargs 额外参数,传递给view,必须是一个字典
- name url的命名
-- 在url中捕获参数
使用`<变量名>`可以捕获url中的值传递给视图
** 捕获的值是 字符串
访问学生详情:
views.py
def detail(request,pk): return HttpResponse(‘学生id为%s的详情页‘%pk)
urls.py中添加
path(‘detail/<int:pk>/‘, views.detail), #int为对对象pk的约束条件,必须为整数。路径转换器
结果如图:
第二种解释,`<变量名>`可以捕获url中的值传递给视图,并且有多个值时是一一对应
views.py如下:
def detail(request,slug,pk): return HttpResponse(‘学生id为%s的详情页‘%pk)
urls.py
path(‘detail/<int:pk>/<slug>/‘, views.detail),
结果如图:
3.使用别的符号,也可以访问例如:-
path(‘detail/<int:pk>-<slug>/‘, views.detail),
常用的转换器:
-- str 匹配除了‘/’路径之外的所有字符串
-- int 匹配任意整数
-- slug 匹配任意ascii字符,加上连字符和下划线
-- uuid 格式化id
-- path 匹配任意非空字符
-- 使用正则表达式 re_path(route,view,kwargs=None,name=None)
python 中正则表达式的分组命名 格式:(?P<name>pattern) 分组按照关键字参数,不分组按照位置参数
如上面所示,输入的变量没有限制,比如年份是4位数字,月份为1-12的数字。
views.py
def student(request,year,mon): return HttpResponse(‘%s年 %s报名的学生‘%(year,mon))
urls.py中
re_path(‘student/(?P<year>\d{4})/(?P<mon>\d[1-12])/‘, views.student), #两种方法都可以 # re_path(‘students/(?P<year>\d{4})/(?P<mon>[0-9]|1[0-2])/‘, views.student),
结果如下:
按照位置参数,容易出问题
urls.py
re_path(‘student/(\d{4})/(\d[1-12])/‘, views.student),
views.py
def student(request,mon,year): return HttpResponse(‘%s年 %s报名的学生‘%(year,mon))
结果如下:
- django 搜索的是什么?
只搜索路径,不搜参数,不搜索请求方法
同一个url可以匹配到get post
原文地址:https://www.cnblogs.com/taoge188/p/10575696.html