今日内容

django请求生命周期的流程

image

路由匹配

path('网址后缀',函数名)
	一旦网址后缀匹配上了就会自动执行后面的函数 
  	并结束整个路由的匹配
    
1.路由结尾的斜杠
	默认情况下不写斜杠 django会做二次处理
		第一次匹配不上 会让浏览器自动加斜杠再次请求
	django配置文件中可以指定是否自动添加斜杠
		APPEND_SLASH = True/False False就是取消自动添加斜杠

2.path转换器
	当网址后缀不固定的时候 可以使用转换器来匹配
		'int': IntConverter(),
		'path': PathConverter(),
		'slug': SlugConverter(),
		'str': StringConverter(),
		'uuid': UUIDConverter(),
	eg:
		path('func/<int:year>/<str:info>/', views.func)	
		转换器匹配到的内容会当做视图函数的关键字参数传入
		转换器有几个叫什么名字 那么视图函数的形参必须对应
		def func(request,year,info):
			pass

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

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

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

反向解析

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

"""
反向解析
	返回一个结果 该结果可以访问带对应的路由
"""
1.路由对应关系起别名
	path('register/',views.reg,name='reg_view')

2.使用反向解析语法
	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()

路由分发

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
"""
当项目特别大 应用特别多的时候 可以使用路由分发 非常方便!!!
"""

名称空间

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

解决方式一
	名称空间(namespace)
		path('app01/', include(('app01.urls', 'app01'), namespace='app01'))
		path('app02/', include(('app01.urls', 'app02'), namespace='app02'))

解决方式二
	只要保证名字不冲突即可
		urlpatterns = [
            path('after/',views.after, name='app01_after_view')
        ]
		urlpatterns = [
            path('after/',views.after, name='app02_after_view')
        ]
 posted on 2022-09-02 00:12  Joker_Ly  阅读(24)  评论(0)    收藏  举报