路由配置
path()函数
from django.urls import path
path(route, views, name = None)
参数:
1.route:字符串类型,匹配的请求路径
2.views:指定路径所对应的试图处理函数的名称
3.name:为地址起别名,在模板中地址反向解析时使用
path转换器
语法<转换器类型:自定义名>
作用:若转换器类型匹配到对应类型的数据,则将数据按照关键字传参的方式传递给视图函数
例:path('page/<int:page>', views.xxx)
urls的path有顺序之分,先匹配第一个再匹配第二个以此类推
urls.py
#http://127.0.0.1:8000/整数/操作符/整数
path('<int:n>/<str:op>/<int:m>',views.cal_view)
views.py
def cal_view(request,n,op,m):
if(op not in ['add', 'sub', 'mul']):
return HttpResponse('your op is wrong')
result = 0
if op == 'add':
result = n + m
if op == 'sub':
result = n - m
if op == 'mul':
result = n * m
html = '结果为%s'%(result)
return HttpResponse(html)
路由配置2
re_path()函数
在url的匹配过程中可以使用正则表达式进行精确匹配
语法:python re_path(reg, view, name = xxx)
正则表达式为命名分组模式(?P<name>pattern);
匹配提取参数后用关键字传参方式传递给视图函数
例:运算器有位数上的要求 限制在2位数
#http://127.0.0.1:5000/20/mul/40 可匹配
#http://127.0.0.1:500/200/mul/400 不可匹配
urls.py
re_path(r'^(?P<x>\d{1,2})/(?P<op>\w+)/(?P<y>\d{1,2})$',views.cal2_view)
^开始 $表结束
(?P\d{1,2}) :x组 \d表示整数 {1,2}表示1到2位
(?P\w+):op组 \w表字符 +表多个
views.py
def cal2_view(request, x, op, y):
html = 'x:%s op:%s y:%s'%(x, op , y)
return HttpResponse(html)
练习
访问地址:
http://127.0.0.1:8000/birthday/四位数字/一到两位数字/一到两位数字
http://127.0.0.1:8000/birthday/一到两位数字/一到两位数字/四位数字
输出:生日为:xxxx年xx月xx日
urls.py
re_path(r'^birthday/(?P<year>\d{4})/(?P<mon>\d{2})/(?P<day>\d{2})$',views.bir_view),
re_path(r'^birthday/(?P<mon>\d{2})/(?P<day>\d{2})/(?P<year>\d{4})$',views.bir_view)
views.py
def bir_view(request, year, mon, day):
html = '生日为:%s年%s月%s日'%(year, mon, day)
return HttpResponse(html)