Django-带参数的路由编写(二)【用正则表达式匹配复杂路由】

在上一篇博文中,学习了“不用正则表达式匹配的简单带参数路由”,详情见链接:
https://blog.csdn.net/wenhao_ir/article/details/131225388

本篇博文学习用“用正则表达式匹配复杂路由”。

简单的参数路由用库django.urls中的函数path()就可以搞定。
但是如果要进行正则匹配,就要用库django.urls中的函数re_path()了。

函数re_path()中的常见正则表达式如下表示所示:
Django-带参数的路由编写(二)【用正则表达式匹配复杂路由】_第1张图片
一个实例如下:
E:\Python_project\P_001\myshop-test\myshop\myshop\urls.py 中的代码:

from django.urls import re_path
from app1 import views

urlpatterns = [
    re_path(r'list/(?P\d{4})/', views.article_list),
    re_path(r'page/(?P\d+)&key=(?P\w+)', views.article_page),
]

提问:为什么要在路径字符串的前面加上前缀“r”,因为如果不加前缀“r”,会把“\d”进行转义处理,但事实上这里不需要转义处理,'r’前缀告诉Python不要对反斜杠进行转义。
上面的代码中出现了三个正则表达式:
①正则表达式(?P\d{4})表示匹配四位数字,year代表匹配到的字符串的名称,比如匹配到了“1987”,那么 year = “1987”。
②正则表达式(?P\d+)表示匹配1位以上数字;
关于正则表达式中 + 和 * 的区别,可以查看链接:
https://blog.csdn.net/wenhao_ir/article/details/131289181
③正则表达式(?P\w+)表示匹配1位以上字母、数字、下划线组合而成的字符串

E:\Python_project\P_001\myshop-test\myshop\app1\views.py 中的代码:

from django.http import HttpResponse  # 导入HttpResponse模块

# Create your views here.


def article_list(request, year):
    return HttpResponse("article_list方法,参数为year,指定4位,值为"+str(year))


def article_page(request, page, key):
    return HttpResponse("article_page方法,参数①为page,任意数字,值为"+str(page)+" 参数②key,字母数字下划线的组合,值为"+key)

运行Django应用:

CD E:\Python_project\P_001\myshop-test\myshop
E:
python manage.py runserver 127.0.0.1:8030

访问URL路径:

http://127.0.0.1:8030/list/1989/

浏览器显示如下:
Django-带参数的路由编写(二)【用正则表达式匹配复杂路由】_第2张图片
访问URL路径:

http://127.0.0.1:8030/list/12345/

浏览器显示如下:
Django-带参数的路由编写(二)【用正则表达式匹配复杂路由】_第3张图片
访问URL路径:

http://127.0.0.1:8030/page/1548484&key=suwenhao

浏览器显示如下:
在这里插入图片描述

本篇博文代码百度网盘下载链接:
https://pan.baidu.com/s/1wzrqjFuII20K62ZugCP8og?pwd=e9a5

你可能感兴趣的:(Django,django,正则表达式)