1、路由配置函数path详解
- path(route,views,name=None),path有三个参数含义如下:
- route:字符串类型,匹配的请求路径
- views:指定路径所对应的视图处理函数的名称
- name:为地址起别名,在模板中地址反向解析时使用
2、path转换器
- 语法:<转换器类型:自定义名>
- 作用:若转换器类型匹配到对应类型的数据,则将数据按照关键字传参的方式传递视图函数
- 例子:patb(‘page/int:page’,views.xxx),将page参数对应的值传递给views.xxx视图函数
3、转换器类型:
- str :匹配除/之外的费控字符串
- int:匹配0和任何正整数,返回一个int
- slug:匹配任意有ASCII字母或数字以及连接符和下划线组成的短标签
- path:匹配非空字段,包括路径分隔符/
在实际开发应用中使用比较多的是str和int,另外两个一般不怎么使用
3、路由配置实例演示一
3.1、需求:
- 输入网址 :http://127.0.0.1:8080,在网页中输出:这是我的首页
- 输入网址:http://127.0.0.1:8080/page/1,在网页中输出:这是编号为1的网页
- 输入网址:http://127.0.0.1:8080/page/2,在网页中输出:这是编号为2的网页
- …
- 输入网址:http://127.0.0.1:8080/page/100,在网页中输出:这是编号为2的网页
3.2、规划路由
在urls.py中设计url,利用path转换器,将page后面的数字设置为变量,这样设计两条路由即可,一条路由为首页配置,另一条路由指向page的页面
3.3、实现视图函数
在views.py中实现如下代码:
from django.http import HttpResponse
def index_view(request):
html="这是我的首页"
return HttpResponse(html)
def page_n(request,num):
html=f"这是编号为{num}的网页"
return HttpResponse(html)
如此,page后面的数字就可以随便填写了,如:
4、路由配置实例演示二
4.1、需求:小计算器
- 定义一个路由格式为:http://127.0.0.1:8080/整数/操作符字符串[add/sub/mul]/整数
- 从路由中提取数据,做相应的操作后返回给浏览器
- 效果如下:http://127.0.0.1:8080/100/add/200 页面显示:结果:300
4.2、设计路由
4.3、实现视图函数
from django.http import HttpResponse
def compute(request,num1,op,num2):
result=0
if op=="add":
result=num1+num2
elif op=="sub":
result=num1-num2
elif op=="mul":
result=num1*num2
else:
result="您输入的op结果非法"
html=f"结果:{result}"
return HttpResponse(html)
在浏览器输入http://127.0.0.1:8080/100/add/200,可以得到如下结果
5、高级路由配置:re_path()
- 作用:在url的匹配过程中可以使用正则表达式进行精确匹配
- 参数:re_path(reg,view,name=xxx)
- 参数和普通的path没有什么太大区别,区别仅仅在于第一个参数使用正则表达式的方式
- 正则表达式为命名分组模式(?P<name>pattern),匹配提取参数后用关键字传参方式传递给视图函数
6、路由配置实例演示三
6.1、需求:两位数以内计算器
- 定义一个路由格式为:http://127.0.0.1:8080/整数/操作符字符串[add/sub/mul]/整数,其中两个整数最大为两位数,一位数也可以,超过两位数则不进入此计算器页面
- 从路由中提取数据,做相应的操作后返回给浏览器
- 效果如下:http://127.0.0.1:8080/10/add/20 页面显示:结果:30
- 效果如下:http://127.0.0.1:8080/100/add/200,则提示找不到实现
6.2、设计路由
此时需要使用到正则路由转换器
6.3、实现视图函数
路由函数实现如下,这里需要注意将num1和num2转换为整数
from django.http import HttpResponse
def compute(request,num1,op,num2):
result=0
num1=int(num1)
num2=int(num2)
if op=="add":
result=num1+num2
elif op=="sub":
result=num1-num2
elif op=="mul":
result=num1*num2
else:
result="您输入的op结果非法"
html=f"结果:{result}"
return HttpResponse(html)
在浏览器输入:http://127.0.0.1:8080/10/add/20,结果如下,符合要求
在浏览器输入:http://127.0.0.1:8080/100/add/200,结果如下:
7、路由配置实例演示四
7.1、需求:输出生日
- 当访问地址如下两种,均能得出生日是xxxx年xx月xx日
- http://127.0.0.1:8080/birthday/四位数字/一到两位数字/一到两位数字
- http://127.0.0.1:8080/birthday/一到两位数字/一到两位数字/四位数字
- 页面输出结果为:生日为:xxxx年xx月xx日
7.2、设计路由
此时需要设计两条路由,利用re_path函数
7.3、实现视图函数
from django.http import HttpResponse
def birthday(request,year,month,day):
html=f"生日为:{year}年{month}月{day}日"
return HttpResponse(html)
在浏览器输入:http://127.0.0.1:8080/birthday/2015/12/06,结果如下:
在浏览器输入:http://127.0.0.1:8080/birthday/12/06/2015,结果如下: