一、路由配置-path
1、path()函数解析
(1)导入:from django.urls import path
(2)语法:path(route,views,name=None)
(3)参数:
route--字符串类型,匹配的请求路径;
views--指定路径所对应的视图处理函数的名称(注意:千万不要带括号,否则将变成传递函数的结果);
name--为地址起别名,在模板中地址反向解析时使用;
2、path()转换器
(1)作用:用于转换url。若转换器类型匹配到对应类型的数据,则将数据按照关键字传参的方式传递给视图函数。
(2)语法:<转换器类型:自定义名>
(3)例子:path('page/<int: page>',views.xxx)。即会将参数page传给view.xxx这个函数。
(4)常用转换器类型。
3、path()转换器小练习
(1)实现url计算器。格式:http://127.0.0.1:8000/整数/操作字符[add/sub/mul]/整数。假如输入http://127.0.0.1:8000/100/add/200,则页面显示:300
(2)步骤1。在urls.py的变量urlpatterns中使用path转换器新增url。
(3)步骤2。在view.py中增加对应视图函数,即具体的计算逻辑。
(4)步骤3,验证结果。
其他的操作类型也可计算出具体的结果。
4、小结。
path()可以实现从浏览器输入资源路径,并返回对应的视图函数处理结果。对于大量且重复的url,可以使用path转换器来实现路由的自适应匹配和分发。
二、路由配置 - re_path()
1、path转换器的缺点
如果需要对输入的url做一些相对较复杂的限制,比如限制只能计算两位数的输入等,就只能在视图文件view.py中添加判断逻辑,但是即使这样做,也会使得代码比较冗杂。因此要使用re_path(),即使用正则来实现逻辑判断。
2、re_path()的用法。
(1)re_path()模块需要导入才能识别。
(2)语法:
- re_path(reg, view, name = xxx)
- 正则表达式为命名分组模式(?P<name>pattern),其中name为变量名,patter为正则化语句;匹配提取参数后用关键字传参方式传递给视图函数。
(3)例子。假如对于上述例子中输入的url进行限制,限制输入只能是两位数的数字。则在视图函数应该添加如下:
解析:^和$是正则表达式的开头和结尾标识。(?P<var1>\d{1,2})、(?P<opt>\w+)、(?P<var2>\d{1,2})分别为var1、opt、var2三个url中的三个变量的正则表达式,分别表示“两位整数”、“多位字符”、“两为整数”。早view中增加新的视图函数如下:
测试:当输入的url中的值大于三位时,则会走到上个例子中的视图函数中进行计算,如果是两位输入值,则会直接输入输入的结果值。
测试1:
测试2:
3、re_path()小练习
(1)要求:实现两种路由格式的输入:http://127.0.0.1:8000/birthday/四位数字/一到两位数字/一到两位数字、http://127.0.0.1:8000/birthday/一到两位数字/一到两位数字/四位数字。
例如:输入网址http://127.0.0.1:8000/birthday/2015/12/11。输出:生日为2015年12月11日;输入网址http://127.0.0.1:8000/birthday/2/28/2008。输出:生日为2008年2月28日。
(2)步骤1。在urls.py中增加路由如下:
(3)步骤2。在urls.py中增加视图函数。
(4)步骤3。测试两种路由的输出。
三、路由配置小结
1、一般使用path()进行路由配置分发。
2、对于复杂的路由过滤逻辑,则使用re_path(),通过路由配置的方式进行分发。