django中路由匹配中正则提取参数机制详解

 更新时间:2025年05月14日 11:12:43   作者:stzhuce  
这篇文章主要介绍了django中路由匹配中正则提取参数机制方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

django路由匹配示例

下面是我们的示例代码:

# 路由
from django.urls import path, re_path

from . import views

urlpatterns = [
    path('articles/2003/', views.special_case_2003),
    
    # 2.0以前版本 是url,现在是re_path 主要是通过正则来匹配
    re_path(r'^articles/(?P<year>[0-9]{4})/(?P<month>[0-9]{2})/$', views.month_archive),
]

# 视图层
def month_archive(request,year,month):
    pass

路由参数传递剖析

django是如何把路由参数获取并传递给视图呢?

从字面上我们可以看出来来,【正则路】所以这里面它巧妙的利用了正则的分组特性,并通过参数解包特性来完成,下面我们演示下大致的流程

假设:我们访问了的path是: articles/2021/11/

1.利用正则分组匹配获取分组参数

import re
path = "articles/2021/11/"
# 使用  正则去匹配路由
res = re.search(r'^articles/(?P<year>[0-9]{4})/(?P<month>[0-9]{2})/$',path)

if not res:
    print("匹配失败!")
else:
    # 提取path参数,利用分组
    kwargs = res.groupdict()

利用分组我们就可以正常的把里面path参数获取到:

{'year': '2021', 'month': '11'}

2.我们利用解包特性把对应的参数传递给视图

# 伪代码,调用视图,
# 这中情况可能会更友好,直接通过关键词方式调用,不影响我们方法定义的时候参数位置
# 但是实际django利用的是位置参数传递
month_archive(request,**kwargs)

# 上面的就等价于 month_archive(request, year="2021", month="11")


# 下面是位置参数传递,注意这是在正则提取的结果上进一步操作
# 1. 提取分组结果
args = res.groups()  #('2021', '11')
# 2. 调用视图,这样就限制了其位置
month_archive(request,*args)

# 上面的代码等价于  month_archive(request,"2011","11")

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • 在 Python 中解析 ISO 8601 日期的详细过程

    在 Python 中解析 ISO 8601 日期的详细过程

    这篇文章主要介绍了在 Python 中解析 ISO 8601 日期,我们将讨论典型的 ISO 8601 日期的结构,并向您展示如何将典型的 DateTime 对象解析为可以在所有地方使用的标准化 DateTime,需要的朋友可以参考下
    2023-08-08
  • Pandas绘图函数超详细讲解

    Pandas绘图函数超详细讲解

    matplotlib要组装一张图表,需要的各个基础组件对象。相对工作量较大,但在pandas中我们有行标签和列标签以及分组信息。原本制作一张图表需要一大堆matplotlib代码。在pandas中只需要一两条代码就可以了,今天记录一下,pandas中常见的几个绘制图表的方法
    2022-12-12
  • Python判断字符串是否为合法标示符操作

    Python判断字符串是否为合法标示符操作

    这篇文章主要介绍了Python判断字符串是否为合法标示符操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-09-09
  • Flask中Tracking ID请求跟踪的设计实现

    Flask中Tracking ID请求跟踪的设计实现

    本文详细介绍如何在 Flask 应用中实现请求跟踪 ID功能,包括中间件设计、日志记录、响应格式化等完整方案,帮助开发者实现请求链路追踪,感兴趣的可以了解一下
    2026-02-02
  • python3 实现一行输入,空格隔开的示例

    python3 实现一行输入,空格隔开的示例

    今天小编就为大家分享一篇python3 实现一行输入,空格隔开的示例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-11-11
  • 使用python制作进度条的方法小结

    使用python制作进度条的方法小结

    偶然间刷到一个视频,说到:当程序正在运算时,会有一个较长时间的空白期,谁也不知道程序运行的进度如何,不如给他加个进度条,于是我今个就搜寻一下,Python版的进度条都可以怎么写,感兴趣的小伙伴跟着小编一起来看看吧
    2024-04-04
  • pycharm配置Qt Designer工具的图文教程

    pycharm配置Qt Designer工具的图文教程

    本文主要介绍了pycharm配置Qt Designer工具的图文教程,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-06-06
  • 简单解决Python文件中文编码问题

    简单解决Python文件中文编码问题

    这篇文章主要介绍了简单解决Python文件中文编码问题的相关资料,需要的朋友可以参考下
    2015-11-11
  • 对python中arange()和linspace()的区别说明

    对python中arange()和linspace()的区别说明

    这篇文章主要介绍了对python中arange()和linspace()的区别说明,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-05-05
  • Python如何保护代码和数据,常见的安全漏洞及应对措施有哪些?

    Python如何保护代码和数据,常见的安全漏洞及应对措施有哪些?

    本文介绍了Python安全编程的重要性,并分享了常见的安全漏洞及应对措施、安全编程最佳实践、安全库的使用、安全配置等内容,同时,还对比了Python和Rust的安全特性,并推荐了一些实践项目,最后提出了学习方法和技巧,鼓励大家不断提高安全意识
    2026-05-05

最新评论