在上一篇博文中,学习了“不用正则表达式匹配的简单带参数路由”,详情见链接:
https://blog.csdn.net/wenhao_ir/article/details/131225388
本篇博文学习用“用正则表达式匹配复杂路由”。
简单的参数路由用库django.urls中的函数path()就可以搞定。
但是如果要进行正则匹配,就要用库django.urls中的函数re_path()了。
函数re_path()中的常见正则表达式如下表示所示:
一个实例如下:
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<year>\d{4})/', views.article_list),
re_path(r'page/(?P<page>\d+)&key=(?P<key>\w+)', views.article_page),
]
提问:为什么要在路径字符串的前面加上前缀“r”,因为如果不加前缀“r”,会把“\d”进行转义处理,但事实上这里不需要转义处理,'r’前缀告诉Python不要对反斜杠进行转义。
上面的代码中出现了三个正则表达式:
①正则表达式(?P<year>\d{4})
表示匹配四位数字,year代表匹配到的字符串的名称,比如匹配到了“1987”,那么 year = “1987”。
②正则表达式(?P<page>\d+)
表示匹配1位以上数字;
关于正则表达式中 + 和 * 的区别,可以查看链接:
https://blog.csdn.net/wenhao_ir/article/details/131289181
③正则表达式(?P<key>\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/
浏览器显示如下:
访问URL路径:
http://127.0.0.1:8030/list/12345/
浏览器显示如下:
访问URL路径:
http://127.0.0.1:8030/page/1548484&key=suwenhao
浏览器显示如下:
本篇博文代码百度网盘下载链接:
https://pan.baidu.com/s/1wzrqjFuII20K62ZugCP8og?pwd=e9a5