首页 > 其他分享 >django之路由层

django之路由层

时间:2022-12-12 19:00:44浏览次数:46  
标签:匹配 views text django re path 路由

django请求生命周期流程图

image

特别注意:WSGI是协议,而wsgiref与uwsgi是基于WSGI协议实现的功能

django路由层

1.路由匹配

	django2.x及以上	path第一个参数写什么就匹配什么
 	django1.x		  第一个参数是正则表达式
   无论什么版本django都自带加斜杠后缀的功能,也可以取消
	配置文件中 APPEND_ALSSH=False

      

2.转换器

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

3.正则匹配

django2.x及以上版本有re_path 第一个参数是正则
	匹配的本事是只要第一个正则表达式能够从用户数据的路由中匹配到数据就算匹配成功,会立刻停止路由层其他的匹配直接执行对应的视图函数

from django.urls import path,re_path
	re_path('text',views.text),

    re_path('textadb', views.textadb)
可以修改为:
		re_path('^text/$',views.text),		^表示开始,$表示结束

    	re_path('^textadb/$', views.textadb)
" 注意:这里是不需要额外传参的"
 django1.x路由匹配使用的url() 功能与django2.x以及以上的re_path()一致

image

4.正则匹配的无名与有名分组

无名分组
	 re_path('^text/(\d{4})', views.text)
  "表示匹配已text开头,再匹配4个数字"这个时候括号内正则匹配到的内容会被当做位置参数传递给视图函数
代码如下:
    def text(request,aaa):  # 这里的形参是什么名字无所谓,按照位置传参
    print(aaa)          # 2131
    return HttpResponse('这里是text')

有名分组:
    re_path('^text/(?P<id>\d{4})', views.text)
    "同样表示匹配text开头,再匹配4个数字,但是起了个名字id"这样会将括号内正则匹配到的内容当做关键字参数传递给视图函数
    
代码如下:
    def text(request, id):		# 如果参数写的不是id会报错,关键字传参
    print(id)  # 2131
    return HttpResponse('这里是text')

反向解析

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

基本使用
	1.路由匹配关系起别名
    	path('text/', views.text, name='text_func')
    这样在前端页面使用的时候,就可以直接使用别名
   2.反向解析语法
		html页面上模板语法{% url 'text_func' %}
    	后端语法		reverse('text_func')

image

image

动态路由的反向解析

path('text/<str:others>/', views.text, name='text_func')

html页面上的模板语法:
    {% url 'text_func' 'jason'%}		需要指定动态部分的内容
后端语法:
   reverse('text_func',args=('嘿嘿嘿'))	同样也需要指定动态部分的内容

image

标签:匹配,views,text,django,re,path,路由
From: https://www.cnblogs.com/zhanghong1229/p/16976878.html

相关文章

  • django-rest framework
    目录(1)Web应用模式及API接口(2)Restful规范(3)drf安装和简单使用(4)源码分析(5)序列化器-Serializer(6)局部和全局响应配置(7)视图(8)路由-Routers(9)认证-Authentication(10)权......
  • BGP路由协议
    IGP和EGP路由协议通常分为内部网关协议(IGP:InteriorGatewayProtocol)和外部网关协议(EGP:ExteriorGatewayProtocol)两大类。一般来讲,IGP用于自治系统AS(AutonomousSys......
  • django之路由层和反向解析
    目录可视化界面之数据增删改查项目初始化步骤访问用户数据的接口数据添加django请求生命周期流程图django路由层反向解析可视化界面之数据增删改查项目初始化步骤1.创建......
  • 基于角色的权限控制(django内置的auth体系)
    #RBAC(Role-BasedAccessControl:基于角色的访问控制)#django的auth就是内置了一套RBAC的权限系统#django中 #后台权限控制(公司内部系统,crm客户关系管理,erp,协同平台)......
  • 路由Routers
    路由Routers对于视图集ViewSet,除了可以自己手动指明请求方式与动作action之间,还可以使用Routers来快速实现路由信息restframework提供了两个routerSimpleRouterDefau......
  • 基于Django中间件引发的编程思想
    基于Django中间件引发的编程思想(重点)importlib模块使用能够以字符串的形式导入模块,最小单位只能到模块名#1.创建一个py文件aaa.py#2.创建一个mypach文件夹,里面创......
  • Vue 路由传参加密
    首先,创建一个base64.jsconstBase64={//加密encode(str){returnbtoa(encodeURIComponent(str).replace(/%([0-9A-F]{2})/g,function......
  • 思科路由器关联RADIUS服务器配置命
    Cisco(config)#aaanew-model //全局启动aaa1.关联Tacacs+服务器Cisco(config)#tacacsservers2Cisco(config-server-tacacs)#addCisco(config-server-tacacs)#addr......
  • Django自带的序列化组件
    Django自带的序列化组件(为drf做铺垫)(drf:djangorestframework)#在前端获取到,后端用户表里所有的数据,并且是列表套字典的格式#views.pyfromdjango.httpimport......
  • Django模型层
    模型层目录模型层1、测试脚本2、单表操作2.1、表准备2.2、操作2.3、常见13种单表查询方法3、Django终端打印SQL语句4、神奇的双下划线5、多表操作5.1、表准备5.2、一......