首页 > 其他分享 >今日内容 django路由匹配,分组,分发和反向解析

今日内容 django路由匹配,分组,分发和反向解析

时间:2022-09-01 23:15:05浏览次数:60  
标签:匹配 函数 视图 django 分组 path 解析 路由

  • django请求生命周期流程图

浏览器

          发送请求(HTTP协议)

web服务网关接口:

1、请求来的时候解析封装

       响应走的时候打包处理

2、django默认的wsgiref模块不能承受高并发 最大只有1000左右

       上线之后会替换成uwsgi来增加并发量

3、WSGI跟wsgiref和uwsgi的关系:

       WGSCI是协议

       wsgiref和uwsgi是实现该协议的功能模块

Django后端:

1、django中间件:

       类似于django的保安 门户

2、urls.py 路由层

       识别路由匹配对应的视图函数

3、views.py 视图层

       网站整体的业务逻辑

4、templates文件夹 模板层

       网站所有的html文件

5、models.py 模型层

       ORM

  • 路由匹配

一.path方法函数

1 path('网址后缀',函数名)
2 一旦网址后缀匹配上了就会自动执行后面的函数并结束整个路由的匹配
3 
4 path(route,view,kwargs,name)
5 它可以接收 4 个参数,其中前两个是必填参数后两个为可选参数

1.route
route 是一个匹配 URL 的准则(类似正则表达式)。当 Django 响应一个请求时,它会从 urlpatterns 的第一项开始,按顺序依次匹配列表中的项,直到找到匹配的项,然后执行该项映射的视图函数或者 include 函数分发的下级路由

2.view
view 指的是处理当前 url 请求的视图函数。当 Django 匹配到某个路由条目时,自动将封装的 HttpRequest 对象作为第一个参数,被“捕获”的参数以关键字参数的形式,传递给该条目指定的视图函数。

3.kwargs
kwargs 指使用字典关键字传参的形式给关联的目标视图函数传递参数。

4.name
name 给 URL 起个别名,常用于 url 的反向解析,避免在模板中适应硬编码的方式使用嵌入 url

二.path转换器

 1   当网址后缀不固定的时候 可以使用转换器来匹配
 2             'int': IntConverter(), #  匹配正整数,包含0;
 3           'path': PathConverter(),  # 匹配格式化的 uuid
 4           'slug': SlugConverter(),  # 匹配字母、数字以及横杠、下划线组成的字符串;
 5           'str': StringConverter(), #  匹配除了路径分隔符(/)之外的非空字符串,这是默认的形式;
 6           'uuid': UUIDConverter(),  # 匹配格式化的 uuid
 7      path('func/<int:year>/<str:info>/', views.func)    
 8      转换器匹配到的内容会当做视图函数的关键字参数传入
 9         转换器有几个叫什么名字 那么视图函数的形参必须对应
10       def func(request,year,info):
11            pass

三.re_path正则匹配

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

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

四 .正则匹配之无名分组

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

五.正则匹配之有名分组

1 re_path('^test/(?P<year>\d+)/(?P<others>.*?)/', views.test)
2    正则表达式匹配到的内容会当做视图函数的关键字参数传递给视图函数
  • 反向解析

 1 页面上提前写死了很多路由 一旦路由发送变化会导致所有页面相关链接失效
 2 为了防止出现该问题 我们需要使用反向解析
 3 """
 4 反向解析:返回一个结果 该结果可以访问到对应的路由
 5 """
 6 1.路由对应关系起别名
 7     path('register/', views.reg, name='reg_view')
 8 2.使用反向解析语法
 9     html页面
10         {% url 'reg_view' %}
11       后端
12         from django.shortcuts import reverse
13        reverse('reg_view')
14 ps:反向解析的操作三个方法都一样path() re_path() url()
  • 无名有名反向解析

1 path('reg/<str:info>/', views.reg, name='reg_view')
2 当路由中有不确定的匹配因素 反向解析的时候需要人为给出一个具体的值
3 reverse('reg_view', args=('jason',))
4 {% url 'reg_view' 'jason' %}
5 
6 ps:反向解析的操作三个方法都一样path() re_path() url()
  • 路由分发

 1 django中的应用都可以有自己独立的
 2     urls.py templates文件夹 static文件夹
 3 能够让基于django开发的多个应用完全独立 便于小组开发
 4 
 5 总路由
 6      path('app01/', include('app01.urls')),
 7     path('app02/', include('app02.urls')),
 8 子路由
 9      path('after/', views.after)  # app01
10     path('after/', views.after)  # app02
11 """
12 当项目特别大 应用特别多的时候 可以使用路由分发 非常方便!!!
13 """

 

  • 名称空间

 1 有路由分发场景下多个应用在涉及到反向解析别名冲突的时候无法正常解析
 2 解决方式1
 3     名称空间
 4         namespace
 5             path('app01/', include(('app01.urls', 'app01'), namespace='app01'))
 6            path('app01/', include(('app01.urls', 'app02'), namespace='app02'))
 7 解决方式2
 8     别名不冲突即可
 9 """
10 保证django项目下没有重复的别名即可
11 """

标签:匹配,函数,视图,django,分组,path,解析,路由
From: https://www.cnblogs.com/tai-yang77/p/16647653.html

相关文章

  • django框架-3
    目录小练习django请求生命周期流程图路由匹配反向解析无名有名反向解析路由分发名称空间9.1小练习小练习作业题:用django编写用户数据的增删改查自己写这道题整理的一......
  • django框架-04
    目录用户信息编辑django请求生命周期流程图django路由匹配反向解析反向解析有名无名反向解析路由分发名称空间用户信息编辑用户管理系统(单表) 1.配置文件 2.模型类......
  • Django之路由层
    django请求周期生命流程图django的生命周期是从用户发送HTTP请求数据到网站响应的过程。整个过程的流程包括:浏览器发送HTTP请求——>wsgiref服务——>中间件—......
  • django3/路由层小知识
    Django请求声明周期流程图路由匹配反向解析无名有名反向解析路由分发名称空间django请求生命周期流程图浏览器默认基于HTTP协议访问web服务网关接口(WebServerGa......
  • Django请求生命周期与反向解析
    Django请求生命周期与反向解析Django请求生命周期流程图Django路由匹配(多版本)1.路由 path('网址后缀',函数名(类名)) 一旦网址后缀匹配上了就会自动执行后面的函数......
  • 路由匹配与解析
    django请求生命周期路由匹配1.路由path('网址后缀',函数名)一旦网址的后缀匹配上时,就会自动执行后面的函数并结束整个路由的匹配2.路由结尾的斜杠2.1如果输入网址......
  • 路由匹配
    Django请求生命周期流程图<style="zoom:50%;"/>路由匹配path('网址后缀',函数名) 一旦网址后缀匹配上了就会自动执行后面的函数并结束整个路由的匹配1.路由结......
  • vue——路由使用
    一.什么是路由:1.理解:一个路由(route)就是一组映射关系(key-value),多个路由需要路由器(router)进行管理。2.前端路由:key是路径,value是组件。二.基本使用:1.安装vue-router,命......
  • Django国际化
    安装python环境并配置系统变量安装django:pipinstallDjangoCMD中输入django-admin 看看是否有命令提示输出,如果没有,将”xxxxx\Roaming\Python\Python39\Scripts”加......
  • django框架03
    目录静态文件操作静态文件资源及配置form表单注意事项request对象方法pycharm连接MySQLdjango连接MySQLdjangoORMORM操作MySQL操作数据的增删改查操作外键创建静态文件操......