Django请求生命周期流程图
<
style="zoom: 50%;" />
路由匹配
path('网址后缀',函数名)
一旦网址后缀匹配上了就会自动执行后面的函数
并结束整个路由的匹配
1.路由结尾的斜杠
默认情况下不写斜杠,django会做第二次处理
第一次匹配不上,会让浏览器加/再次请求
2.path转换器
当网址后缀不固定的时候,可以使用转换器来匹配
'int': IntConverter(),
'path': PathConverter(),
'slug': SlugConverter(),
'str': StringConverter(),
'uuid': UUIDConverter(),
path('func/<int:year>/<str:info>',views.func)
转换器匹配到的内容会当做视图函数的关键字参数传入
转换器有几个、叫什么名字,那么视图函数的形参必须对应
def func(request,year,info):
pass
2.re_path正则匹配
re_path(正则表达式,函数名)
一旦网址后缀的正则能够匹配到内容就会自动执行后面的函数
并结束整个路由的匹配
re_path('^test/$',views.test)
当网址后缀不固定的时候,可以使用转换器来匹配
3.正则匹配之无名分组
re_path('^test/(\d+)',views.test)
正则表达式匹配到的内容会当做视图函数的位置参数传递给视图函数
4.正则函数之有名分组
re_path('^test/(?P<year>\d+)',views.test)
# 用(?P<别名>正则表达式)给正则表达式起别名,便于查找结果
正则表达式匹配到的内容会当做视图函数的关键字参数传递给视图函数
5.django版本区别
在django1.11中
只支持正则匹配,并且方法是:url()
在django2/3/4中
path()/re_path() # 等价于 url()
反向解析
1.作用
页面上提前写死了很多路由,一旦路由发送变化会导致所有页面相关链接失效
为了防止出现该问题,我们需要使用反向解析
2.效果
反向解析:返回一个结果,该结果可以访问到对应的路由
3.路由对应关系起别名
path('register/',views.reg,name='reg_view')
4.使用反向解析语法
html页面
{% url 'reg_view' %}
后端
from django.shortcuts import reverse
reverse('reg_view')
ps:
反向解析的操作,三个方法都是一样(path()/re_path()/url())
无名有名反向解析
path('reg/<str:info>/',views.reg,name='reg_view')
党路由中又不确定的匹配因素,返现解析的时候需要认为给出一个具体的值
reverse('reg_view',args=('jason',))
{% url 'reg_view' 'jason' %}
ps:
反向解析的操作,三个方法都是一样(path()/re_path()/url())
路由分发
1.介绍
django中的应用都可以有自己独立的 urls.py/templates文件夹/static文件夹
能够让基于django开发的多个应用完全独立,便于小组开发
总路由:
path('app01',include('app01.urls')),
path('app02',include('app02.urls')),
子路由:
path('after/',views.after) # app01
path('after/',views.after) # app02
# 不同app可以里有相同的名字,不会冲突
'''
当项目特别大,应用特别多的时候,可以使用路由分发,非常方便!!!
'''
名称空间
有路由分发场景下多个应用在涉及到返乡解析别名冲突的时候无法正常解析
解决方式1:
名称空间:namespace
path('app01/',include(('app01.urls','app01'),namespace='app01'))
path('app01/',include(('app01.urls','app02'),namespace='app02'))
解决方式2:
别名不冲突即可
'''保证django项目下没有重复的别名即可'''
标签:匹配,views,app01,path,reg,路由
From: https://www.cnblogs.com/Zhang614/p/16647692.html