一、django请求生命周期流程图
学习流程:
路由层、视图层、模板层、模型层、组件(插件、中间件)、BBS项目
二、路由匹配
1.path转换器
# path('网址后缀',视图函数名)
一旦网址后缀匹配上了就会自动执行后面的视图函数
并结束整个路由的匹配
# 路由中以斜杠结尾
默认情况下不写斜杠 django会作第二次处理
第一次匹配不上 会让浏览器加上浏览器斜杠再次请求
如果想让django不作这个二次处理,去settings里加上# APPEND_SLASH = False
# path转换器
当网址后缀不固定的时候 可以使用转换器来匹配
# django2.X及以上版本路由动态匹配有转换器(五种)
'int':Intconverter(), 匹配 整型 (常用)
'path':PathConverter(), 匹配 所有字符
'slug':SlugConverter(), 英文字符中的斜杠 下划线 或数字
'str':StringConverter(), 匹配字符串 (常用)
'uuid':UUIDConverter(), 匹配 满足uuid形式字符串
转换器匹配到的内容会当作视图函数的关键字 参数传入
path('func/<int:year>/<str:info>/', views.func)
转换器有几个叫什么名字 那么视图函数的形参必须对应
def func(request,year,info):
pass
2.re_path正则匹配
先导入一下正则模块
from django.urls import path,re_path
# re_path(正则表达式,函数名) # 这个是2.x以上版本的django带的,1.x是url()
一旦网址后缀的正则能够匹配到内容 就会自动执行后面的函数
并结束整个路由层的匹配,无论输入的路由正确的正则内容后跟着啥,都无所谓
re_path('^test/$',views.test) # 这个就正则固定死了
re_path('^test/\d{4}/',views.test) # 必须是test/四个数字/
# 正则匹配之无名分组
正则表达式匹配到的内容会当作视图函数的位置参数传递给视图函数
re_path('^test/(\d+)/',views.test)
比如 re_path('^test/(\d{5})/(.*?)/', views.test) # views的test要加上两个位置参数(随意叫啥,但是坑必须挖上)
# 正则匹配之有名分组
正则表达式匹配到的内容会当作视图函数的关键字参数 传递给视图函数
re_path('^test/(?P<year>\d+)/(?P<other>.*?)/',views.test)
# views的test要加上两个位置参数(必须按照分组的别名追加关键字参数)
# 注意,正则的有名无名不能二者混用!!!!!!!!!!!
三、反向解析
是一门技术,页面上提前写死了很多路由 一旦路由发送变化会导致所有页面相关链接失效,为了做到解耦合, 我们需要使用反向解析
# 反向解析:根据别名返回一个结果 该结果可以访问到对应的路由
1.路由对应关系起别名
path('login',views.login,name='xxx_view')
2.使用反向解析
# 先去html页面 {% url 'xxx_view' %}
# 再去后端 先导一下reverse模块,然后去视图函数里reverse('xxx_view')就可以拿到对应的路由
动态路由的反向解析
path('func1/<str:others>/', views.func1_func, name='func1_view')
html页面上模板语法 {% url 'func1_view' 'jason' %}
后端语法 reverse('func1_view', args=('嘿嘿嘿',))
标签:匹配,views,python,视图,Django,test,path,路由
From: https://www.cnblogs.com/wznn125ml/p/16977162.html