首页 > 其他分享 >路由匹配与解析

路由匹配与解析

时间:2022-09-01 20:36:22浏览次数:54  
标签:匹配 views 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,path,解析,reg,路由
From: https://www.cnblogs.com/riuqi/p/16647739.html

相关文章

  • 路由匹配
    Django请求生命周期流程图<style="zoom:50%;"/>路由匹配path('网址后缀',函数名) 一旦网址后缀匹配上了就会自动执行后面的函数并结束整个路由的匹配1.路由结......
  • C++正则匹配字符串
    以下实例使用C++正则从一串混乱的字符串中匹配带小数点的数字点击查看代码#include<iostream>#include<regex>usingnamespacestd;intmain(){smatchres......
  • JAVA常用集合解析
    JAVA常用集合解析常用集合属性详解集合底层实现原理常用集合适用场景分析集合属性详解集合是一个存放对象的引用的容器,在Java中它存在于java.util包下,List、Set......
  • vue——路由使用
    一.什么是路由:1.理解:一个路由(route)就是一组映射关系(key-value),多个路由需要路由器(router)进行管理。2.前端路由:key是路径,value是组件。二.基本使用:1.安装vue-router,命......
  • vue前端解析Excel表格数据
    引入插件npminstallxlsx--save在组件中使用<template><divid="app"><h3>{{message}}</h3><el-uploadactionaccept=".xlsx,.xls":auto-upload="fa......
  • 深入解析JSON.stringify和JSON.parse
    日常转化JSON的时候,我们都会用到JSON.stringify,但你真的了解JSON.stringify吗?关于JSON.stringify,我们最多的应用场景无非就是将它转化为JSON字符串,但其实使用过程中也会碰......
  • 1[代码解析005] 关于一次bug排查解析 | new出一个对象其属性默认值是?
    1、代码片段//子单据状态更新List<OutboundOrderDetails>updateOutboundOrderDetailsList=Lists.newArrayList();outboundOrderDetailsLis......
  • golang解析yaml文件
    golang解析yaml文件yaml文件是目前最常用的配置文件,使用go语言编写代码和工具时,也会用到yaml文件,将服务配置及中间件等信息定义到yaml文件中,那么如何将yaml文件中定......
  • Vue路由动态改变浏览器标题名称和图标样式
    路由constrouter=newRouter({mode:'hash',base:process.env.BASE_URL,router:[{path:'/',redirect:'home'......
  • 使用正则表达式匹配任意字符包括空格和换行符
    今天在PHP中想使用正则表达式来获取一段文本中的任意字符。于是很随意得就写出如下匹配规则:(.*)结果运行之后才发现,无法获得换行之后的文本。于是查了一下手册,才......