当前位置: 首页 > news >正文

django请求生命周期流程图 路由匹配 无名分组 有名分组 反向解析 无名有名反向解析 路由分发 名称空间

目录标题

      • 一:django请求生命周期流程图
      • 二:路由匹配
          • 1.原理
          • 2.关于路由结尾的斜杠
          • 3.path转换器
          • 4.re_path正则匹配
          • 5.无名分组
          • 6.有名分组
          • 7.django不同版本中路由匹配的区别
      • 三:反向解析
          • 1.引入反向解析
          • 2.反向解析定义:
          • 3.路由对应关系起别名
          • 4.使用反向解析的语法
      • 四:无名有名反向解析
      • 五:路由分发
          • 1.前提:
          • 2.路由分发的书写
          • 3.使用场景
      • 六:名称空间
          • 1.引入名称空间
          • 2.解决方法:

一:django请求生命周期流程图

在这里插入图片描述

二:路由匹配

1.原理
  • 一旦网址后缀匹配上,就会自动执行后面的函数,并结束整个路由匹配
path('网址后缀',函数名)
path('index/', views.index)
2.关于路由结尾的斜杠
  • 默认情况下不写斜杠,django会自动重定向到有斜杠的路径
  • 如何取消django自动匹配斜杠? 在配置文件中加上:APPEND_SLASH=False
3.path转换器
  • 1.什么时候用转换器?当网址后缀不固定的时候 可以使用转换器来匹配
  • 2.如何写path转换器
path('login/<int:year>/<str:desc>/', views.login)
  • 3.视图函数
  • 转换器匹配到的内容会以关键字参数的形式传给视图函数
def login(request, year, desc):
  • 4.转换器分类
# 常用
'int': IntConverter(),
'str': StringConverter(),
 
# 不常用
'path': PathConverter(),
'slug': SlugConverter(),
'uuid': UUIDConverter(),
4.re_path正则匹配

1.django2.x及以上的版本中默认的路由是path,所以re_path需要自己手动导入

from django.urls import re_path

2.如何书写re_path路由

re_path(正则表达式,函数名)
re_path('^test/$', views.test)

3.匹配原理:一旦网址后缀的正则能够匹配到浏览器端输入的内容,就会自动执行后面的函数,并结束整个路由匹配

5.无名分组

1.书写

re_path('^home/(\d+)/(.*?)/', views.home)

2.视图函数:正则表达式匹配到的内容会以位置参数的形式传给视图函数

def home(request, a, b)
6.有名分组

1.书写

re_path('^test1/(?P<year>\d+)/(?P<others>.*?)/')

2.视图函数:正则表达式匹配到的内容会以关键字参数的形式传给视图函数

def test1(request, a, b)
7.django不同版本中路由匹配的区别

1.django1.x版本中,只支持正则匹配,只有url( )方法

2.django2,3,4 版本中,默认的是path方法,re_path( )方法和django1.x版本中的url( )方法一样

三:反向解析

反向解析的操作三个方法都一样path() re_path() url()

1.引入反向解析

由于页面上提前写死了很多路由,一旦路由发生变化,会导致所有的页面相关链接失效,为了防止该问题的出现,需要反向解析

2.反向解析定义:

返回一个结果,该结果可以访问到对应的路由

3.路由对应关系起别名
path('insert/',views.insert, name='insert')
4.使用反向解析的语法
  • 1.html页面
{% url '别名' %}
{% url 'insert' %}
  • 后端
from django.shortcuts import reverse

def insert(request):
	reverse('reg_view')

四:无名有名反向解析

反向解析的操作三个方法都一样path() re_path() url()

1.书写

path('remove/<str:info>/', views.re, name='remove')

2.注意:当路由中有不确定的匹配因素 反向解析的时候需要人为给出一个具体的值

def remove(request,info):
    reverse('remove', args=('jason',))  # 有几个不确定因素,就添加几个在后面

3.html页面中

{% url 'remove' 'jason'%}  有几个不确定因素,就添加几个在后面

五:路由分发

1.前提:

前提:django中的应用都可以有自己独立的urls.py,tempates文件夹,views.py,static文件夹
目的:能够让基于django开发的多个应用完全独立 便于小组开发

2.路由分发的书写
  • 总路由
path('app01/',include('app01.urls')),
path('app02/',include('app02.urls')),
  • 子路由
path('after/',views.after)  # app01

path('after/',views.after)  # app02
3.使用场景

当项目特别大 应用特别多的时候 可以使用路由分发 非常方便!!!

六:名称空间

1.引入名称空间

有路由分发场景,且多个应用涉及到反向解析,别名冲突的,无法正常解析的情况下

2.解决方法:
  • 1.方法一:名称空间
# 这种书写方法是django2.x以上的版本
path('app01/',include('app01.urls','app01'), namespace='app01')
  • 方法二:提前规定好别名加应用名前缀,保证django项目下没有重复的别名

相关文章:

  • cks 考试指南
  • 全球与中国防水薄膜行业市场前瞻及未来投资潜力预测报告2022-2028年
  • CTFHUB.introduction
  • 基于神经网络的图像识别,人工神经网络图像识别
  • 快鲸智慧楼宇系统:助力商办楼宇快速实现智慧化、数字化运营
  • 在线订票系统--永胜票务网是怎么搭建的?
  • 3D游戏角色动画
  • python3 词频统计计数分析+可视化词云 jieba+wordcloud 数据分析
  • java计算机毕业设计健身房管理系统源码+数据库+系统+lw文档+mybatis+运行部署
  • 畅捷通T+ v17任意文件上传漏洞复现
  • Rsync+Inotify实现nginx配置文件同步
  • Hbuilder X npx browserslist@latest --update-db
  • 考虑阶梯式碳交易机制与电制氢的综合能源系统热电优化(Matlab代码实现)
  • 金仓数据库 KingbaseES 插件参考手册 walminer
  • 手把手教你搭建规范的团队vue项目,包含commitlint,eslint,prettier,husky,commitizen等等
  • 【391天】每日项目总结系列128(2018.03.03)
  • 【技术性】Search知识
  • 78. Subsets
  • chrome扩展demo1-小时钟
  • Golang-长连接-状态推送
  • js数组之filter
  • node和express搭建代理服务器(源码)
  • PHP的Ev教程三(Periodic watcher)
  • Python进阶细节
  • thinkphp5.1 easywechat4 微信第三方开放平台
  • 复杂数据处理
  • 工作中总结前端开发流程--vue项目
  • 紧急通知:《观止-微软》请在经管柜购买!
  • 悄悄地说一个bug
  • MiKTeX could not find the script engine ‘perl.exe‘ which is required to execute ‘latexmk‘.
  • 新海诚画集[秒速5センチメートル:樱花抄·春]
  • !!【OpenCV学习】计算两幅图像的重叠区域
  • #Linux(权限管理)
  • (env: Windows,mp,1.06.2308310; lib: 3.2.4) uniapp微信小程序
  • (Java岗)秋招打卡!一本学历拿下美团、阿里、快手、米哈游offer
  • (vue)页面文件上传获取:action地址
  • (WSI分类)WSI分类文献小综述 2024
  • (笔试题)合法字符串
  • (免费领源码)Java#Springboot#mysql农产品销售管理系统47627-计算机毕业设计项目选题推荐
  • .net mvc 获取url中controller和action
  • .Net MVC4 上传大文件,并保存表单
  • .NET 常见的偏门问题
  • .Net 高效开发之不可错过的实用工具
  • .Net 中Partitioner static与dynamic的性能对比
  • .NET/C# 利用 Walterlv.WeakEvents 高性能地中转一个自定义的弱事件(可让任意 CLR 事件成为弱事件)
  • .NET命名规范和开发约定
  • .NET微信公众号开发-2.0创建自定义菜单
  • .pyc文件是什么?
  • .set 数据导入matlab,设置变量导入选项 - MATLAB setvaropts - MathWorks 中国
  • ??myeclipse+tomcat
  • @Autowired自动装配
  • @configuration注解_2w字长文给你讲透了配置类为什么要添加 @Configuration注解
  • @hook扩展分析
  • [ 2222 ]http://e.eqxiu.com/s/wJMf15Ku
  • []使用 Tortoise SVN 创建 Externals 外部引用目录