上一个章节我们了解到了当地址栏里面我们输入了一个地址,这个请求到达我们Django,Django是怎么处理的。
路由配置
- settings.py 中的
ROOT_URLCONF
指定了主路由配置列表urlpatterns
的文件位置。但是如果传入的HttpRequest对象具有urlconf属性(由中间件设置),则其值将被用于代替ROOT_URLCONF
设置(也就是我们可以自定义项目入口url是哪个文件)。 Django 中 url 的定义就是在这个列表完成的。
当然这些都是上个章节的知识点。
路由配置-path
- path()函数
- 导入:
from django.urls import path
- 语法:
path(route,views,name=None)
- 参数:
- route:字符串类型,匹配的请求路径
- views:指定路径所对应的视图处理函数的名称
- name:为地址起个小名,在模板中地址反向解析时使用
路由配置-path-转换器
我们现在根据之前创建的多创建几个页面page/2/,page/3/,page/4/,思考一下,如果现在项目要求要写到100,我们用这个方法去写是不是太过于繁琐,这里我们将接触到一个path转换器
- path转换器
- 语法:<转换器类型:自定义名>
- 作用:若转换器类型匹配到对应类型的数据,则将数据按照关键字传参的方式传递给视图函数
- 例子:
path('page/<int:page>',views.xxx)
我们现在去使用一下在urls里面添加下
之后去我们的views里面添加上
现在我们在去感受一下我这里就随便写个第520吧
通过上面我们可以看到是不是我们不用去一个一个去urls里面去添加path,这里有一个知识点就是还记得我们匹配是自上往下匹配的所以当我们打这个page/1/的时候一定是优先匹配我们上面的path中的page/1/。
利用这个去做一个计算器
- 定义一个路由的格式为:
- http://127.0.0.1:8000/整数/操作字符串[add/sub/mul]/整数
- 从路由中提取数据,做相应的操作后返回给浏览器
- 效果图
- 分析
这个路由
http://127.0.0.1:8000/整数/操作字符串[add/sub/mul]/整数
那么我们在path应该这样写path('page/<int:i>/<str:s>/<int:n>',views.cal_view)
接下来我们去views添加相关的运算的操作。
- views中的代码
def cal_view(request,i,s,n):
if s not in ['add','sub','mul']:
return HttpResponse("<h1>你输入的s错啦,s只能为add,sub,mul!</h1>")
result = 0
if s == "add":
result = i + n
elif s =="sub":
result = i - n
elif s == "mul":
result = i * n
return HttpResponse("<h1>结果为:%s</h1>"%(result))
路由配置-re_path()
- re_path()函数
- 在url的匹配过程中可以使用正则表达式进行进行精确匹配
- 语法:
re_path(reg,view,name=xxx)
- 正则表达式为命名组模式(?Ppatten);匹配提取参数后用关键字传参方式传递给视图函数
我们用上面的计算器做个样例
之前的计算器我们可以多位数运算现在我们要限制只能做两位内的运算
可匹配: http://127.0.0.1:8000/40/add/65
不可匹配: http://127.0.0.1:8000/125/add/5555
现在我们的urlpatterns怎么写呢?
urlpatterns = [
path('admin/', admin.site.urls),
re_path(r'^page/(?P<i>\d{1,2})/(?p<s>\w+)/(?p<n>\d{1,2})$',views.cal_view),
]
注意这里把re_path放到我们刚才path之前方便测试
现在输入两位可以看到匹配到的是re_path,如果输入三位及以上的话就会使用我们之前的path