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

django 03 django路由层

时间:2022-12-12 19:33:11浏览次数:47  
标签:03 匹配 views 视图 django path 路由

django请求生命周期流程图

 

 django路由层

# 1.路由匹配
      django1.x      第一个参数是正则表达式
      django2.x+    path第一个参数写什么就匹配什么
      """
        -1.django所有版本都会在在匹配时有自己加斜杠后缀的功能
        -2.使其不加斜杠匹配,在django的settings:
               APPEND_SLASH = False
      """


# 2.转换器
      当我们无法确定自己的网址后缀是否固定时,就可以使用转换器 
           django2.x及以上动态匹配有五种转换器
       """
       str: 匹配除路径分隔符外的任何非空的字符
       int:匹配0或任意正整数
       sulg:匹配任意一个由字母或数字组成的字符
       uuid:匹配格式化后的uuid
       path:能够匹配完整的url路径
       """   
       ps: django支持自定义转换器(方便自己写正则表达式匹配更加细化的内容) 
  
    path('login_auth/', views.login),
          # views视图传参:login(request)
    path('register/<str:func>/',views.register_func),
          # views视图传参:register_func(request, func)
    path('register/<str:func>/p/<int:id>/', views.register_func)
          # views视图传参:register_func(request, func, id)
    """
    # 1.使用转换器会对视图函数产生影响
    # 2.转换器匹配到的内容需要当作视图函数的关键字参数传入
    # 3.转换器有几个,视图函数的参数就必须有几个
    """


# 3.正则匹配  
    """django2.x以上有re_path"""
    -1. re_path(正则表达式,函数名(视图函数地址))  
       一旦网址后缀的正则能够匹配到内容就会自动执行后面的函数,然后结束整个路由的匹配
    -2. re_path('^test/$', view.test)
       当网址后缀不固定时可以使用转换器来匹配  



# 4.正则匹配的无名有名分组
    无名分组: re_path('^test/(\d+)/', views.test)
         正则表达式匹配到的内容会当作视图函数的位置参数传递给视图函数
    有名分组: re_path('^test/(?P<year>\d+)/(?P<others>.*?)/', views.test)
         正则表达式匹配到的内容会当做视图函数的关键字参数传递给视图函数
    """无名分组与有名分组不能混合使用"""

    

反向解析

"""
页面上提前写死了许多路由,一旦路由发生变化会导致所有页面相关的链接失效,针对此类问题需要使用反向解析
"""

# 1.什么是反向解析?
     返回一个结果,该结果可以访问到对应的路由

# 2.路由对应关系起别名
     path('login_auth/', views.login, name='login')

# 3.反向解析语法的使用
     前端: {% url 'reg_view' %}
     后端: 1.先导入
               from django.shortcuts import reverse
           2.视图函数内写入
               reverse('reg_view')
"""无名解析:在path,re_path,url中的操作是相同的"""

# 4.动态路由的有名无名反向解析
   - 路由层:
        path('register/<str:func>/p/<int:id>/', views.register_func, name='register_func')
   - 视图层:
        def register_func(request,func,id):
            reverse('register_func',args=('123',1234,))
            return render(request,'001.html')
   - 前端: 
        <a href="{% url 'register_func' '123' 1234 %}"></a>
   - url输入:
         http://XXX/register/123/p/1234/
  
 

路由分发

# 1.django中的应用都可以有自己独立文件
     urls.py、templates文件夹、static文件夹

# 2.为什么要路由分发?
    -1.为了能够让基于django开发的多个应用完全独立,便于小组开发
    -2.当项目特别大 应用特别多的时候 可以使用路由分发

# 3.总路由负责将指明道路,子路由负责操作数据
    总路由:
        path('app01/', include('app01.urls')),
        path('app02/', include('app02.urls')),
    子路由:
        path('after/', views.after)  # app01
        path('after/', views.after)  # app02

django名称空间

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

标签:03,匹配,views,视图,django,path,路由
From: https://www.cnblogs.com/juzijunjun/p/16976928.html

相关文章

  • ORM数据增删改查 django请求生命周期 django路由层 反向解析
    目录可视化界面之数据增删改查补充1.建表2.数据展示功能3.数据添加功能4.数据编辑功能5.数据删除功能django请求生命周期流程图crsfwsgirel与uwsginginxdjango路由层1.路......
  • 7天7项云服务 | 03-对象存储Object Storage,将海量对象文件转成链接
           2006年3月,AWS发布了简单存储服务(S3,SimpleStorageService),这也是云计算从此商业化的标志性事件,是云计算的第一个产品。              有......
  • 7天入门小程序开发 | 03-小程序JS前后端交互
            第三节课又来啦,今天我们将会让小程序页面动起来,通过JS实现前后端的互动,包括:JS传静态数据JS传递列表数据并循环输出点击按钮刷新时间无需点击按钮自动刷新时......
  • django之路由层
    django请求生命周期流程图特别注意:WSGI是协议,而wsgiref与uwsgi是基于WSGI协议实现的功能django路由层1.路由匹配 django2.x及以上 path第一个参数写什么就匹配什么......
  • redis.exceptions.ConnectionError: Error while reading from xxxx:6379 : (110, 'Co
    ##报错提示:redis.exceptions.ConnectionError:Errorwhilereadingfromx.x.x.x:6379:(110,'Connectiontimedout') ##解决办法使用的是腾讯云服务器,redis服......
  • django-rest framework
    目录(1)Web应用模式及API接口(2)Restful规范(3)drf安装和简单使用(4)源码分析(5)序列化器-Serializer(6)局部和全局响应配置(7)视图(8)路由-Routers(9)认证-Authentication(10)权......
  • 基于DSP+ZYNQ平台Zynq7035/45 FPGA高速串行接口的千兆以太网UDP例程设计和使用说明
         Xines基于XilinxXC7Z035/45-2FFG676I自研平台XQ6657Z35-EVM的Zynq7035/45PL端高速串行接口,使用千兆以太网通讯方式来测试验证底板上的光口通信,实现以下以......
  • 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,协同平台)......