小秦哥 发表于 2024-11-18 17:24:34

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>{3,15})/$', user_profile),
]
测试:
访问 http://127.0.0.1:8000/profile/john_doe/,返回 User profile: john_doe。
https://i-blog.csdnimg.cn/direct/b4261875c30544b5891a6d329a8de4b2.png
访问 http://127.0.0.1:8000/profile/john-doe/,匹配失败,返回 404 页面。
https://i-blog.csdnimg.cn/direct/d38257556e53406e809806cf03606f8d.png
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。
https://i-blog.csdnimg.cn/direct/aaa673bb998a46ff99afeb63445d1fcd.png
访问 http://127.0.0.1:8000/event/24/11/17/,匹配失败。
https://i-blog.csdnimg.cn/direct/235bab772acf40459240e3d8a033eb3b.png
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>{6}|{3})/$', color_view),
]
测试:
访问 http://127.0.0.1:8000/color/FF5733/,返回 Color: #FF5733。
https://i-blog.csdnimg.cn/direct/afb3d1fbaa9a41ad94f76f81da11b444.png
访问 http://127.0.0.1:8000/color/123/,返回 Color: #123。
https://i-blog.csdnimg.cn/direct/f242dae74d284dbeb4cab53e8436cd46.png
访问 http://127.0.0.1:8000/color/GG5733/,匹配失败。
https://i-blog.csdnimg.cn/direct/6138b758c359474abdec9ba36f7b9c53.png
匹配自定义 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>+)/$', article_view),
]
测试:
访问 http://127.0.0.1:8000/article/django-tutorial/,返回 Article: django-tutorial。
https://i-blog.csdnimg.cn/direct/92014b3f3b8b4fde8050efdf91035ff9.png
访问 http://127.0.0.1:8000/article/django_tutorial/,匹配失败。
https://i-blog.csdnimg.cn/direct/824d3f0208c34c499bf075ea7d4f12e9.png
总体代码:
https://i-blog.csdnimg.cn/direct/13e3ea6a32d94c31be1a89a0690a5dac.png
5. 总结

通过 re_path 和正则表达式,我们可以准确控制 Django 的 URL 路由匹配规则。与基于 path 的路径转换器相比,re_path 提供了更高的灵活性,实用于复杂的 URL 模式需求。
希望这个教程对你有所帮助!如果有任何问题,欢迎随时提问。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: 3. Django中的URL调理器 (re_path 和正则表达式)