当前位置: 首页 > article >正文

3. Django中的URL调度器 (re_path 和正则表达式)

在 Django 的 URL 路由中,re_path 提供了基于正则表达式的强大匹配能力,可以处理更复杂的 URL 模式需求。通过自定义正则表达式匹配,我们可以定义灵活且精确的路由规则。

1. 使用 re_path 的基本语法

re_path 的语法如下:

from django.urls import re_path

urlpatterns = [
    re_path(r'^pattern$', view_function, name='route_name'),
]

其中:

  • r’^pattern$’ 是正则表达式,用于匹配 URL。
  • view_function 是对应的视图函数。
  • name 是路由的名称(可选)。

2. 示例:匹配用户名的路由

假设我们需要匹配用户名,并要求用户名只能包含字母、数字或下划线,长度为 3 到 15 个字符:


# urls.py
from django.urls import re_path
from django.http import HttpResponse

# 示例视图函数
def user_profile(request, username):
    return HttpResponse(f"User profile: {username}")

# 使用 re_path 定义路由
urlpatterns = [
    re_path(r'^profile/(?P<username>[a-zA-Z0-9_]{3,15})/$', user_profile),
]

测试:

访问 http://127.0.0.1:8000/profile/john_doe/,返回 User profile: john_doe。
在这里插入图片描述

访问 http://127.0.0.1:8000/profile/john-doe/,匹配失败,返回 404 页面。
在这里插入图片描述

3. 使用 re_path 实现复杂模式匹配

匹配日期格式
假设我们需要匹配 URL 中的日期格式,并将其解析为视图函数的参数:

复制代码
# urls.py
from django.urls import re_path
from django.http import HttpResponse
from datetime import datetime

# 示例视图函数
def event_view(request, year, month, day):
    date = f"{year}-{month}-{day}"
    return HttpResponse(f"Event date: {date}")

# 使用 re_path 定义路由
urlpatterns = [
    re_path(r'^event/(?P<year>\d{4})/(?P<month>\d{2})/(?P<day>\d{2})/$', event_view),
]

测试:

访问 http://127.0.0.1:8000/event/2024/11/17/,返回 Event date: 2024-11-17。
在这里插入图片描述
访问 http://127.0.0.1:8000/event/24/11/17/,匹配失败。
在这里插入图片描述

4. 结合正则表达式实现高级功能

匹配十六进制颜色代码

十六进制颜色代码的格式是 #RRGGBB 或 #RGB,可以通过以下方式实现匹配:

复制代码
# urls.py
from django.urls import re_path
from django.http import HttpResponse

# 示例视图函数
def color_view(request, color):
    return HttpResponse(f"Color: #{color}")

# 使用 re_path 定义路由
urlpatterns = [
    re_path(r'^color/(?P<color>[A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})/$', color_view),
]

测试:
访问 http://127.0.0.1:8000/color/FF5733/,返回 Color: #FF5733。
在这里插入图片描述

访问 http://127.0.0.1:8000/color/123/,返回 Color: #123。
在这里插入图片描述

访问 http://127.0.0.1:8000/color/GG5733/,匹配失败。
在这里插入图片描述

匹配自定义 Slug 格式

Slug 是一种 URL 中常见的标识符格式,通常由字母、数字、连字符组成。我们可以使用正则表达式来匹配自定义的 Slug 格式:

复制代码
# urls.py
from django.urls import re_path
from django.http import HttpResponse

# 示例视图函数
def article_view(request, slug):
    return HttpResponse(f"Article: {slug}")

# 使用 re_path 定义路由
urlpatterns = [
    re_path(r'^article/(?P<slug>[a-zA-Z0-9-]+)/$', article_view),
]

测试:

访问 http://127.0.0.1:8000/article/django-tutorial/,返回 Article: django-tutorial。
在这里插入图片描述
访问 http://127.0.0.1:8000/article/django_tutorial/,匹配失败。
在这里插入图片描述
总体代码:
在这里插入图片描述

5. 总结

通过 re_path 和正则表达式,我们可以精确控制 Django 的 URL 路由匹配规则。与基于 path 的路径转换器相比,re_path 提供了更高的灵活性,适用于复杂的 URL 模式需求。

希望这个教程对你有所帮助!如果有任何问题,欢迎随时提问。


http://www.kler.cn/a/398306.html

相关文章:

  • 遇到 mysql_config not found 错误
  • Rewar Model的输出(不包含训练)
  • docker启动训练容器教程
  • 一个win32 / WTL下多线程库(CThread类)的使用心得
  • Docker环境搭建Cloudreve网盘服务(附shell脚本一键搭建)
  • 深度学习:transpose_qkv()与transpose_output()
  • Linux运维篇-iscsi存储搭建
  • 每日练习(字节青训)
  • Windows配置域名映射IP
  • 软考教材重点内容 信息安全工程师 第 3 章 密码学基本理论
  • 【redis】—— 初识redis(redis基本特征、应用场景、以及重大版本说明)
  • 【第二课】Rust变量与数据类型(一)
  • Android OpenGL ES详解——立方体贴图
  • 电子电气架构 -- 下一代整车电网
  • 微服务即时通讯系统的实现(客户端)----(3)
  • React学习05 - redux
  • MATLAB实现GARCH(广义自回归条件异方差)模型计算VaR(Value at Risk)
  • Spring:纯注解开发模式-Ioc对bean的管理
  • 聊天服务器(8)用户登录业务
  • Java项目实战II基于微信小程序的课堂助手(开发文档+数据库+源码)
  • RK3588开发板Android12-SDK更新通知
  • halcon3d disparity_image_to_xyz非常重要的算子及使用条件
  • 平均值(水题???)
  • STM32——外部中断
  • 【C语言】连接陷阱探秘(2):命令冲突与static修饰符
  • 【Python系列】Python中打印详细堆栈信息的技巧