首页 > 其他分享 >路由匹配

路由匹配

时间:2022-09-01 20:12:58浏览次数:45  
标签:匹配 views app01 path reg 路由

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

相关文章

  • C++正则匹配字符串
    以下实例使用C++正则从一串混乱的字符串中匹配带小数点的数字点击查看代码#include<iostream>#include<regex>usingnamespacestd;intmain(){smatchres......
  • vue——路由使用
    一.什么是路由:1.理解:一个路由(route)就是一组映射关系(key-value),多个路由需要路由器(router)进行管理。2.前端路由:key是路径,value是组件。二.基本使用:1.安装vue-router,命......
  • Vue路由动态改变浏览器标题名称和图标样式
    路由constrouter=newRouter({mode:'hash',base:process.env.BASE_URL,router:[{path:'/',redirect:'home'......
  • 使用正则表达式匹配任意字符包括空格和换行符
    今天在PHP中想使用正则表达式来获取一段文本中的任意字符。于是很随意得就写出如下匹配规则:(.*)结果运行之后才发现,无法获得换行之后的文本。于是查了一下手册,才......
  • OSPF动态路由协议详解
    我们知道RIP协议最多只能允许15跳,且完全根据跳数距离来选择最佳路径,不考虑带宽,这是不符合现代网络标准的。所以我们介绍另外一种动态路由路由协议-OSPF。 一、自治系统......
  • 关于路由权限之页面级别权限和按钮级别权限
    关于路由权限之页面级别权限和按钮级别权限:https://blog.csdn.net/weixin_69743436/article/details/125339360https://blog.csdn.net/fxss5201/article/details/10534892......
  • 华为路由器基于全局、接口、Vlanif的DHCP配置
    DHCP动态主机配置协议1、原理:DHCP服务器:为客户端分配IP地址和其他网参数的服务器DHCP客户端:可以自动获取IP地址网关和DNS的设备DHCP首次接入:1,发送......
  • 解决通配符的匹配很全面, 但无法找到元素 'aop:config' 的声明
    这是因为在applicationContext.xml文件中没有添加对应的地址http://www.springframework.org/schema/aophttp://www.springframework.org/schema/aop/spring-aop.xsd"......
  • 4路由代理The Routing Agent
    protoname/protoname.h    我们定义了一个叫做agent的新类,包含帮助协议完成其工作所需的属性和函数。为了说明计时器的使用,我们假设质子体是一个主动的路由协......
  • [路由器]小米路由器4A千兆版刷机相关
    零.工具下载链接:https://pan.baidu.com/s/1vfJMsCkyiEsN6CaMhml7Hg?pwd=xm4a提取码:xm4a一.救砖(未验证)记得先备份再刷入(下面链接的缺少备份步骤,评论有怎么备份)!参考......