DjangoURL调度器(一)

一、介绍

image-20220927153154662

当一个用户请求 Django 站点的一个页面,下面是 Django 系统决定执行哪个 Python 代码使用的算法:

  • Django确定要使用的根URLconf模块,一般是在settings中的ROOT_URLCONF设置的值,但是如果传入 HttpRequest 对象具有一个urlconf 属性(由中间件设置),则其值将用于代替 ROOT_URLCONF设置。

  • Django加载该URLconf模块并查找变量 urlpatterns,它是一个列表django.urls.path() 和 / 或django.urls.re_path()实例。

  • Django按顺序遍历每个URL模式,并停在与请求的URL匹配的第一个URL模式,需要特别注意编写的顺序

  • 一旦某个URL模式匹配,Django就会导入并调用给定的视图,该视图是一个简单的Python函数(或基于类的视图方法)。该视图通过以下参数传递:

    • 一个HttpRequest实例。
    • 如果匹配的URL模式没有返回任何命名组,则来自正则表达式的匹配作为位置参数提供。
    • 关键字参数由路径表达式匹配的任何命名部分组成,并由可选的kwargs参数传给 django.urls.path()或django.urls.re_path()。
  • 如果没有URL模式匹配,或者在此过程中的任何点发生异常,Django将调用适当的错误处理视图

二、基本使用

image-20220927153527314

配置子应用urls.py

from django.urls import path


urlpatterns = [
  path('user/',user),
  path('user/info/',user_info),
  path('user/<id>/',user_id),
  path('user/<id>/<year>/',user_id_year),
  path('user/<int:id>/',user_int),
]

注意

  • 从URL中捕获值,请使用尖括号
  • 捕获的值可以选择包含转换器类型。例如,用于 <int:name>捕获,前面的int指整数参数,name是参数的名称
  • 没有必要添加一个前导斜杠,因为每个URL都有,例如,使用articles而不是/articles

2.1、路径转换器

  • str:匹配任何非空字符串,不包括路径分隔符'/'。如果转换器不包含在表达式中,这是默认值。
  • int:匹配零或任何正整数。返回一个int。
  • slug:匹配由ASCII字母或数字组成的字符串,以及横线和下划线字符。例如: building-your-1st-django_site可以匹配,django_@site是不可以匹配的。
  • uuid:匹配格式化的UUID。为防止多个URL映射到同一页面,必须包含破折号,并且字母必须是小写。例如,075194d3-6885-417e-a8a8-6c931e272f00。返回一个 UUID实例。
  • path:匹配任何非空字符串,包括路径分隔符 '/',可以匹配完整的URL路径,而不仅仅是URL路径的一部分str,使用时要谨慎,因为可能造成后续的所有url匹配都失效。
    path('articles/<uuid:uuid>/',views.article_uuid),
    
    #获取uuid
    import uuid
    print(uuid.uuid1())
    

    三、自定义路径转换器

    image-20220927211136779

    转换器是一个包含以下内容的类:

  • 一个regex类属性,作为一个re匹配字符串

  • to_python(self, value)方法,它处理匹配的字符串转换成要传递到视图函数的类型

  • 新建一个converters.py文件,在文件中定义一个FourDigitYearConverter类:

  1. to_url(self, value)方法,用于处理将Python类型转换为URL中使用的字符
    class FourDigitYearConverter(object):
      regex = '[0-9]{4}'
    
    
      def to_python(self, value):
        return int(value)
    
    
      def to_url(self, value):
        return '%04d' % value
    
  2. 使用register_converter()方法在URLconf中注册自定义转换器类 :
    from django.urls import register_converter, path
    
    
    from . import converters, views
    
    
    register_converter(converters.FourDigitYearConverter, 'yyyy')
    
    
    urlpatterns = [
      path('articles/2030/', views.special_case_2030),
      path('articles/<yyyy:year>/', views.year_archive)
    ]
    

    四、使用正则表达式

    image-20220927213552930

    使用正则表达式匹配路径,请使用 re_path()而不是path()

    在Python正则表达式中,命名正则表达式组的语法是(?P<name>pattern),其中name是组的名称,并且pattern是一些要匹配的模式

    4.1、案例代码

    from django.urls import path, re_path
    
    
    from . import views
    
    
    # url() 是 re_path 的别名,不推荐使用
    urlpatterns = [
        re_path(r'^articles/(?P<year>[0-9]{4})/$', views.year_archive),
      re_path(r'^articles/(?P<year>[0-9]{4})/(?P<month>[0-9]{2})/$', views.month_archive),
      # 不推荐, 匹配 blog/page-3/
      re_path(r'^blog/(page-(\d+)/)?$', blog_articles),
      # 推荐 ,匹配:comments/page-2/  路径到 comments(request, page_numer)
      re_path(r'^comments/(?:page-(?P<page_number>\d+)/)?$', comments),
    ]
    
    
    

注意事项

  • 无论正则表达式匹配什么类型,每个捕获的参数都以字符串的形式发送到视图
  • 除了命名的组语法,例如(?P<year>[0-9]{4}),也可以使用较短的未命名组,例如([0-9]{4}),但是不建议这样使用,会引起未知的匹配

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/356050.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

影响可变利差有几个因素,Anzo Capital昂首资本再说两个

在之前的文章中&#xff0c;Anzo Capital昂首资本抛砖引玉说了影响可变利差的两个因素&#xff0c;后台评论区也是热闹非凡&#xff0c;纷纷留言讨论&#xff0c;攻陷了评论区&#xff0c;今天Anzo Capital昂首资本就把各位投资者的留言进行整理&#xff0c;继续补充影响可变…

航空MRO行业研究:2027年全球市场将达1200亿美元

随着全球航空运输业的不断发展&#xff0c;越来越多的航空器进入了使用年限&#xff0c;需要进行维修、修理和大修。这促进了航空MRO市场的不断增长。此外&#xff0c;航空器设备和技术的不断更新换代&#xff0c;也对航空MRO市场带来了新的机遇和挑战。 航空MRO市场是指维修、…

2024最新版IntelliJ IDEA安装使用指南

2024最新版IntelliJ IDEA安装使用指南 Installation and Usage Guide to the Latest JetBrains IntelliJ IDEA Community Editionn in 2024 By JacksonML JetBrains公司开发的IntelliJ IDEA一经问世&#xff0c;就受到全球Java/Kotlin开发者的热捧。这款集成开发环境&#xf…

vue-admin-template框架

vue-admin-template框架地址&#xff1a;项目地址 项目预览地址&#xff1a;项目预览 框架简介&#xff1a;这是一个极简的 vue admin 管理后台。它只包含了 Element UI & axios & iconfont & permission control & lint&#xff0c;这些搭建后台必要的东西。 …

go包与依赖管理

包&#xff08;package&#xff09; 包介绍 Go语言中支持模块化的开发理念&#xff0c;在Go语言中使用包&#xff08;package&#xff09;来支持代码模块化和代码复用。一个包是由一个或多个Go源码文件&#xff08;.go结尾的文件&#xff09;组成&#xff0c;是一种高级的代码…

uniCloud ---- JQL语法 连表查询

目录 JQL数据库操作 JQL流程图解 JQL的限制 单表查询 联表查询 新增 修改 删除 联表查询 例子 字段过滤field 字段别名as 限制查询记录的条数limit 只查一条记录getone JQL数据库操作 JQL&#xff0c;全称 javascript query language&#xff0c;是一种js方式操…

vue3 el-pagination 将组件中英文‘goto’ 修改 为 中文到‘第几’

效果如图&#xff1a; 要求&#xff1a;将英文中Go to 改为到第几 操作如下&#xff1a; <template><div class"paging"><el-config-provider :locale"zhCn"> // 注意&#xff1a;这是重要部分<el-pagination //分页组件根据官…

解锁创意无限:Adobe Photoshop 2023(PS2023)引领设计革命

Adobe Photoshop 2023 (PS2023)&#xff0c;作为图像处理软件的翘楚&#xff0c;以其卓越的性能和无限的可能性&#xff0c;继续引领着数字创意设计的潮流。对于设计师、摄影师、艺术家以及那些对视觉效果有高要求的人们来说&#xff0c;PS2023无疑是他们的必备工具。 在PS202…

OpenHarmony—ArkTS限制throw语句中表达式的类型

规则&#xff1a;arkts-limited-throw 级别&#xff1a;错误 ArkTS只支持抛出Error类或其派生类的实例。禁止抛出其他类型&#xff08;例如number或string&#xff09;的数据。 TypeScript throw 4; throw ; throw new Error();ArkTS throw new Error();限制省略函数返回类…

SpringBoot + Mybatis 快速入门实战

一.创建Spring项目 出现报错的话&#xff0c;换一个jdk创建&#xff0c;一般java 8 选择Spring Web 测试一下 默认端口8080&#xff0c;但是Vue也需要8080&#xff0c;因此&#xff0c;后端设置一个端口3000 再次测试&#xff0c;成功 此处&#xff0c;如何kill一个端口占…

Spring Cloud + Vue前后端分离-第14章 项目优化

源代码在GitHub - 629y/course: Spring Cloud Vue前后端分离-在线课程 Spring Cloud Vue前后端分离-第14章 项目优化 14-1 项目初始化 1.增加readme.md&#xff0c;添加项目介绍 2.修改初始化sql README.md readme.md是用来写一些项目描述信息&#xff0c;git远程仓库可…

数字图像处理(实践篇)三十六 OpenCV-Python 使用ORB和BFmatcher对两个输入图像的关键点进行匹配实践

目录 一 涉及的函数 二 实践 ORB(Oriented FAST and Rotated BRIEF)是一种特征点检测和描述算法,它结合了FAST关键点检测和BRIEF描述子。ORB算法具有以下优势: ①实时性:能够在实时应用中进行快速的特征点检测和描述。 ②

SpringBoot,TDengine时序数据库,实现物联网,车联网大批量数据更新最佳实践。

简介 TDengine 是一款专为物联网、工业互联网等场景设计并优化的大数据平台&#xff0c;它能安全高效地将大量设备、数据采集器每天产生的高达 TB 甚至 PB 级的数据进行汇聚、存储、分析和分发&#xff0c;对业务运行状态进行实时监测、预警&#xff0c;提供实时的商业洞察。其…

【C/C++】02_希尔排序

希尔排序虽然是直接插入排序的升级版本&#xff0c;和插入排序有着相同的特性&#xff0c;即原始数组有序度越高则算法的时间复杂度越低&#xff08;预排序机制&#xff09;&#xff0c;但是是不稳定排序算法。 为了降低算法的时间复杂度&#xff0c;所以我们需要在排序之前尽…

数据结构OJ题——二叉树前序、中序遍历非递归实现(Java版)

二叉树前序、中序遍历非递归实现 前序非递归遍历实现中序非递归遍历实现 前序非递归遍历实现 题目&#xff1a; 二叉树前序遍历非递归实现 总体思路&#xff1a;用非递归的方式模拟递归遍历。 以下图为例&#xff1a; 图示详解&#xff1a; 代码实现&#xff1a; /*** Defi…

promethues

1、定义&#xff1a;promethues是一个开源的系统监控以及报警系统&#xff0c;整合zabbix的功能&#xff08;监控系统、网络、设备&#xff09;&#xff0c;promethues可以兼容网络、设备、容器监控、告警系统。因为其与k8s是一个项目基金开发出来的产品&#xff0c;天生匹配k8…

汽车网络安全管理体系框架与评价-汽车网络安全管理体系评价

当前 &#xff0c; 随若汽车联网产品渗透率、 智能传感设备搭载率的提升&#xff0c; 以及汽车与通信、互联网等行业的融合创新发展&#xff0c; 汽车行业面临愈发严峻的网络安全风险&#xff0c; 对消费者人身财产安全、 社会安全乃至国家安全产生威胁&#xff0c; 是产业发展…

【Spark系列1】DAG中Stage和Task的划分全流程

一、整体流程 每个Aciton操作会创建一个JOB&#xff0c;JOB会提交给DAGScheduler&#xff0c;DAGScheduler根据RDD依赖的关系划分为多个Stage&#xff0c;每个Stage又会创建多个TaskSet&#xff0c;每个TaskSet包含多个Task&#xff0c;这个Task就是每个分区的并行计算的任务。…

头戴式耳机哪个牌子音质好?2024音质超好的百元头戴式耳机品牌推荐

在当今数字化的时代&#xff0c;音乐已成为我们生活中不可或缺的一部分&#xff0c;而头戴式耳机因其优质的音效和舒适的佩戴感&#xff0c;成为了许多音乐爱好者的首选&#xff0c;在众多品牌中&#xff0c;究竟哪个牌子的头戴式耳机音质最好呢&#xff1f;今天我就来给大家推…

echarts坐标轴文字样式

https://echarts.apache.org/zh/option.html#xAxis.nameTextStyle xAxis. nameTextStyle、 yAxis: {type: value,// max: -0.15,name: 沉降累计值/mm,nameTextStyle: {padding: [0, 0, 0, 10],color: #93B8E2,fontSize: 12,fontFamily: Alibaba-PuHuiTi-R},splitLine: {show:…