ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

路由匹配与解析

2022-09-01 20:30:37  阅读:183  来源: 互联网

标签:匹配 views re path 解析 reg 路由


django请求生命周期

image

路由匹配

1.路由
path('网址后缀',函数名)
一旦网址的后缀匹配上时,就会自动执行后面的函数并结束整个路由的匹配

2.路由结尾的斜杠
2.1如果输入网址的时候不写斜杠,django会就会进行二次处理
'自动加上斜杠,再匹配一次'
2.2django配置文件中可以指定是否自动添加斜杠
APPEND_SLASH = False

3.path转换器
3.1当网址后缀不固定的时候,可以使用转换器来匹配
'int': IntConverter(),
'path': PathConverter(),
'slug': SlugConverter(),
'str': StrConverter(),
'uuid': UuidConverter(),

3.2转换器匹配到的内容会当做视图的关键字参数传入
path('delete/<int:year>/<str:info>/', views.delete),
转换器有几个名字,那么视图函数的形参必须对应
def delete(request, year, info):
    pass

4.re_path正则匹配
re_path(正则表达式,函数名)
一旦网址后缀的正则能匹配内容就会自动执行后面的函数并结束整个路由的匹配
re_path('^test/', views.test)

5.正则匹配之无名分组
re_path('^test/(\d+)/', views.test)
正则表达式匹配到的内容会当做视图函数的位置参数传递给视图函数

6.正则匹配之有名分组
re_path('^rest/(?P<year>\d+)/(?P<others>.*?)/', views.test)
正则表达式匹配到的内容会当做视图函数的关键字参数传递给视图函数

7.django版本区别
在django1.11中,只支持正则匹配,并且方式是url()
在django2,3,4中,path()、re_path等价于url()

反向解析

1.在页面上直接写死很多路由,一旦路由发生变化会导致所有页面的相关链接失效,为了防止出现该问题,我们需要使用反向解析
'返回一个结果,该结果可以访问到对应的路径'

2.路由对应关系起别名
path('delete/', views.reg, name='reg_view')

3.使用反向解析语法
3.1html页面
{% ulr 'reg_view' %}
3.2后端
from django.shortcuts import reverse
reverse('reg_view')
'反向解析的操作其他三个方法都一样path()、re_path()、url()'

无名有名反向解析

路由
path('reg/<str:imfo>/', views.reg, name='reg_view')

当路由中有不确定的匹配因素是,反向解析时需要人为的给出一个具体的值
后端
reverse('reg_view', args=('barry',))

html页面
{% url 'reg_view' 'barry' %}
'反向解析的操作其他三个方法都一样path()、re_path()、url()'

路由分支

1.django中的每个应用都可以有独自的urls.py文件夹、static文件夹
这样基于django开发多个应用可以完全独立,便于小组开发

2.总路由
path('app01/', include('app01.urls')),
path('app02/', include('app02.urls')),

3.子路由
path('after/', views.after)  # 这个是app01
path('after/', views.after)  # 这个是app02

名称空间

'有路由分发场景下多个应用在涉及到反向解析别名冲突的时候无法正常解析'
方法1:
patah('app01/', include(('app01.urls', 'app01'), namespace='app01'))
patah('app02/', include(('app02.urls', 'app02'), namespace='app02'))

方法2:
别名不冲突即可eg:app01_reg_view、app02_reg_view

作业

使用分组、反向解析、路由分发完成用户数据增删改查

标签:匹配,views,re,path,解析,reg,路由
来源: https://www.cnblogs.com/riuqi/p/16647739.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有