路由(urls)

自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm=1001.2014.3001.5501

Django的URL路由流程:

l Django查找全局urlpatterns变量(urls.py)。

l 按照先后顺序,对URL逐一匹配urlpatterns每个元素。

l 找到第一个匹配时停止查找,根据匹配结果执行对应的处理函数。

l 如果没有找到匹配或出现异常,Django进行错误处理。

Django支持三种表达格式,分别如下:

l 精确字符串格式,如"articles/2017/"。

一个精确URL匹配一个操作函数;最简单的形式,适合对静态URL的响应;URL字符串不以"/"开头,但要以"/"结尾。

l Django的转换格式:<类型:变量名>,如"articles/<int:year>/"。

该格式是一个URL模板,在匹配URL时获得一批变量作为参数;该格式也是一种常用形式,用于通过URL获取和传递参数。

表6提供了一些格式转换类型及其说明。

表6 格式转换类型及说明

|------------|--------------------------------------------------|
| 格式转换类型 | 说 明 |
| str | 匹配除分隔符(/)外的非空字符,默认类型<year>等价于<str:year> |
| int | 匹配0和正整数 |
| slug | 匹配字母、数字、横杠、下划线组成的字符串,str的子集 |
| uuid | 匹配格式化的UUID,如075194d3-6885-417e-a8a8-6c931e272f00 |
| path | 匹配任何非空字符串,包括路径分隔符,是全集 |

l 正则表达式格式,如"articles/(?p<year>0-9{4})/"。

借助正则表达式丰富语法表达一类URL(而不是一个);可以通过"<>"提取变量作为处理函数的参数,高级用法;使用该方法时,前面不能使用path()函数,必须使用re_path()函数;表达的全部是str格式,不能是其他类型。使用正则表达式有两种形式,分别如下:

Ø 不提取参数:比如"re_path(articles/(0-9{4})/",表示四位数字,每一个数字都是0到9的任意数字。

Ø 提取参数:命名形式为"(?P<name>pattern)",比如"re_path(articles/(?p<year>0-9{4}))/",将正则表达式提取的四位数字,每一个数字都是0到9的任意数字命名为year。

注意:当网站功能较多时,可以在该功能文件夹里建一个urls.py文件,将该功能模块下的URL全部写在该文件里,但是要在全局的urls.py中使用include方法实现URL映射分发。

编写URL的三种情况如下:

l 普通URL:re_path('^index/',view.index),re_path('^home/',view.Home.as_view())

l 顺序传参:re_path(r'^detail-(\d+)-(\d+).html/',views.detail)

l 关键字传参:re_path(r'^detail-(?P<nid>\d+)-(?P<uid>\d+).html/',views.detail)

推荐使用关键字传参的路由方法,找到项目根目录的配置文件夹demo下面的urls.py,打开该文件,并添加如下代码:

from django.contrib import admin # 引入默认后台的模块,其中包括管理界面的urls路由规则

from django.urls import path, include # 引入urls模块中path方法

urlpatterns = [

path('admin/', admin.site.urls),

path('app1/',include('app1.urls'))

]

然后在app1下面创建一个urls.py文件,并在其中编写属于这个模块的url规则:

from app1 import views as app1_views

urlpatterns = [

精确匹配视图

path('articles/2003/', app1_views.special_case_2003),

匹配一个整数

path('articles/<int:year>/', app1_views.year_archive),

匹配两个位置的整数

path('articles/<int:year>/<int:month>/', app1_views.month_archive),

匹配两个位置的整数和一个slug类型的字符串

path('articles/<int:year>/<int:month>/<slug:slug>/', app1_views.article_detail),

]

如果想使用正则表达式匹配,则使用下面代码:

from django.urls import re_path

from app1 import views as views

urlpatterns = [

精确匹配

path('articles/2003/', views.special_case_2003),

按照正则表达式匹配4位数字年份

re_path(r'^articles/(?P<year>0-9{4})/$', views.year_archive),

按照正则表达式匹配4位数字年份和2位数字月份

re_path(r'^articles/(?P<year>0-9{4})/(?P<month>0-9{2})/$', views.month_archive),

按照正则表达式匹配4位数字年份和2位数字月份和一个至少1位的slug类型的字符串

re_path(r'^articles/(?P<year>0-9{4})/(?P<month>0-9{2})/(?P<slug>\\w-+)/$', views.article_detail),

]

接下来即可通过"/app1/articles/2003/12/11/my_day"访问app1_views.article_detail这个视图方法了,效果如图25所示。

图25 访问视图方法

相关推荐
benchmark_cc1 分钟前
实时行情系统如何避免无意义的重复请求?从请求去重到缓存设计
大数据·开发语言·python·pandas·量化交易·股票数据·quantdash
田里的水稻2 分钟前
Python_两大法宝dir() 与 help() 的妙用
开发语言·python
郝学胜-神的一滴3 分钟前
Python浏览器自动化:Selenium与Playwright实战对比,网页爬虫&自动操作一站式指南
开发语言·爬虫·python·selenium·程序人生·自动化
Zip-List5 分钟前
工作小记-pytorch的算子优化: 转gpu核函数 python调c
c语言·c++·pytorch·python·cuda
隐擎fox6 分钟前
解密 BGP Anycast 边缘路由与跨国链路质量检测:多租户网络出口的低时延与防丢包架构实战
网络·python·网络协议·tcp/ip·网络安全·架构·tcpdump
闲云自留地9 分钟前
从零造一台 Ubuntu 24.04:虚拟机、装系统、配 IP 到 root 远程登录一篇通
数据库·tcp/ip·ubuntu
Allen-Steven10 分钟前
SQL查询专项:从完整书写到综合判断
运维·服务器·数据库
把我格子衫拿来11 分钟前
手眼标定:相机与机械臂如何建立坐标关系?从 AX=XB 到 OpenCV 实践
python·opencv·机器人·手眼标定·坐标变换
Navicat中国12 分钟前
SQL 编辑器生产力:重构与实时错误检测
数据库·sql·重构·编辑器·navicat
Data analyse45619 分钟前
App埋点版本兼容的字段迁移校验
大数据·运维·服务器·前端·数据库·数据分析