django生命周期和路由层

发布时间 2023-04-23 17:29:38作者: 无敌大帅逼

django生命周期

https://www.yuque.com/liyangqit/cbndkh/evyps8
image
image

django路由层

1.路由匹配
	django2.X及以上 path第一个参数写什么就匹配什么
	django1.X第一个参数是正则表达式
	无论什么版本django都自带加斜杠后缀的功能 也可以取消
 	配置文件中 APPEND_SLASH = False #默认为true


2.转换器
	正常情况下很多网站都会有很多相似的网址 如果我们每一个都单独开设路由不合理
	django2.X及以上版本路由动态匹配有转换器(五种)
   		str:匹配除路径分隔符外的任何非空字符串。
        int:匹配0或者任意正整数。
        slug:匹配任意一个由字母或数字组成的字符串。
        uuid:匹配格式化后的UUID。
        path:能够匹配完整的URL路径
     	 ps:还支持自定义转换器(自己写正则表达式匹配更加细化的内容)
 	 # 转换器 将对应位置匹配到的数据转换成固定的数据类型
    path('index/<str:info>/', views.index_func),  # index_func(实参request对象,info='转换器匹配到的类型转换之后的内容')
    path('index/<str:info>/<int:id>/', views.index_func)  # index_func(实参request对象,info='转换器匹配到的类型转换之后的内容',id='转换器匹配到的类型转换之后的内容')


3.正则匹配
	django2.X及以上版本有re_path 第一个参数是正则
 	匹配的本质是只要第一个正则表达式能够从用户输入的路由中匹配到数据就算匹配成功会立刻停止路由层其他的匹配直接执行对应的视图函数
 	re_path('^test/$', views.test) #加上^是以什么开头,$是结尾
	'''django1.X路由匹配使用的是url() 功能与django2.X及以上的re_path()一致'''


4.正则匹配的无名有名分组
	无名分组
    	re_path('^test/(\d{4})/', views.test)
    	会将括号内正则匹配到的内容当做位置参数传递给视图函数
 	有名分组
    	re_path('^test/(?P<year>\d{4})/', views.test)
		'''?P<value>的意思就是命名一个名字为value的组,匹配规则符合后面的/d+'''
    	会将括号内正则匹配到的内容当做关键字参数传递给视图函数
 	注意上述的分组不能混合使用!!!

反向解析(模板语法)

通过一个名字可以反向解析出一个结果 该结果可以访问到某个对应的路由

基本使用
	1.路由匹配关系起别名
    	path('login001/', views.login, name='login_view')
	2.反向解析语法
    	html页面上模板语法	{% url 'login_view' %}
        
    	后端语法 
        之前是return redirect('/路由名/')
        现在是reverse('login_view')得到路由名
        通过这种方式达到解耦合的目的
        
动态路由的反向解析
	path('func1/<str:others>/', views.func1_func, name='func1_view')
 	html页面上模板语法 {% url 'login_view' 'jason' %} #/login/jason/
	#路由是动态的,不传值的话不知道该怎么找
 	后端语法		  reverse('login_view', args=('egon',))#/login/egon/
	通过args来传参数