ICode9

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

Django请求生命周期与反向解析

2022-09-01 21:00:09  阅读:173  来源: 互联网

标签:生命周期 匹配 Django 反向 urls path 解析 路由


Django请求生命周期与反向解析

Django请求生命周期流程图

image

Django路由匹配(多版本)

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

2.路由结尾的斜杠
	路由结尾的斜杠我们是建议写上的,虽然Django会帮我们做二次处理即使我们不输的话Django会帮我们做二次处理帮我们自动加上这个斜杠
	我们在向浏览器请求的时候如果我们没有加斜杠第一次匹配失败第二次就会自动帮你加斜杠再次发起申请
	我们在Django配置文件中可以指定是否自动添加斜体,如果不想要自动添加的话那么只需要在配置文件中加一个配置即可(不过我想应该没几个人去干这种搬起石头砸自己脚的事情吧)
	APPEND_SLASH = False

3.path(路由转换器)
	当网址后缀不固定的时候那么就可以使用准换气来匹配
		'int': IntConverter()  # 匹配0或者任何正整数返回一个int
		'apth': PathConverter()  # 匹配非空字段,包括路径分隔符也就是/
		'slug': SlugConverter()  # 匹配任意由ASCII字母或数字以及连字符和下划线组成的短标签
		'str': StringConverter()  # 默认类型,匹配除了/之外的非空字符串
		'uuid': UUIDConverter()  # 接受UUID(通用唯一识别码)字符串xxxx-xxxx-xxxxx-xxxxx
	path('func/<int:number>/<str:info>/',views.func)
	转换器匹配到的内容会被当做视图函数的关键字参数传入
	转换器有几个叫什么名字 那么视图函数的参数必须对应否则就会以报错
		def func(request,number,info):
			pass

4.re_path正则匹配
	re_path(正则表达式,函数名)
	一旦网络后缀的正则能够匹配到内容就会自动执行后面的函数,并结束掉整个路由的匹配
		re_path('^test/$', views.test)
	当网址后缀不固定的时候可以使用转换器来匹配

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

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

7.django版本区别
	在Django1.xx版本中  只支持正则匹配,并且方法是url()
	在Django2.xx版本中  path()  re_path()  等价于url()

Django反向解析

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

1.路由对应关系起别名(别名不可以冲入)
	path('register/',views.reg,name='regview')

2.使用反向解析语法
	html页面(前端反向解析)
		[% url 'reg_view' %]
	后端反向解析
		from django.shortcuts import reverse
		reverse('reg_view')
	反向解析的操作三种方法都一样path() re_path() url()

Django无名有名反向解析

1.path('reg/<str:info>', views.reg, name='reg_view')
	当路由中有不确定的匹配因素,反向解析的时候需要认为给出一个具体的值
	reverse('reg_view', args=('joseph',))
2.模板文件中使用
	[% url 'reg_view' 'joseph' %]

Django路由分发

Django中的应用都可以有自己独立的urls.py、templates文件夹、static文件夹,这些文件能够让Django文件实现多个应用独立开发,以便小组开发使用,最终汇总到一个Django文件中通凑分配路由即可实现
1.在项目的urls.py文件内配置一级路由
	1.1从对应的应用程序中导入urls文件
	1.2配置path,一级路由地址+include(返回二级路由文件)
	1.3非urloatterns内path配置好的路径,则默认访问静态文件
2.对应的程序app内新建urls.py,用于配置二级路由
总路由:
	path('app01/', include('app01.urls'))
	path('app02/', include('app02.urls'))

子路由:
	path('after/', views.after)  # app01
	path('after/', views.after)  # app02数据写死的
3.伪静态
	假装自己的路径是一个静态(数据写死的)文件的路径,其实就是你经过了视图函数处理,动态渲染页面,提高百度收藏你这个页面力度,当别人搜索你这个页面相关的内容,百度就会优先展示你的页面(这样虽然能提高你页面被访问的概率,但是还是干不过RMB玩家哈哈哈)
	只需要在urls.py配置路由的时候加一个.html后缀即可

Django名称空间概念

1.有路由分发场景下多个应用在设计到反向解析别名冲突的时候无法正常解析
解决方法一:
	namespace(django2和版本一不太一样)
		path('app01/', include(('app01.urls', 'app01' namespace='app01')))
		path('app02/', include(('app02.urls', 'app02' namespace='app02')))
解决方法二:
	最根源的解决方法其实就是在开展项目前就规划好别名,只要不冲突那么就不会发生错误

标签:生命周期,匹配,Django,反向,urls,path,解析,路由
来源: https://www.cnblogs.com/joseph-bright/p/16647807.html

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

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

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

ICode9版权所有