目录
6.Django5路由命名与反向解析reverse与resolve
1.Django5路由定义
一个完整的路由包含:路由地址、视图函数(或者视图类)、可选变量和路由命名。
路由称为URL (Uniform Resource Locator,统一资源定位符)或者URLconf
路由是对可以从互联网上得到的资源位置和访问方法的一种简洁的表示,每个文件都有一个唯一的路由,用于指出网站文件的路径位置。
http://localhost:8000/index/
index/ 请求地址,根据urls.py配置文件,找到app文件夹下的views文件下的index视图函数
执行index视图函数,到index2.html页面
2.Django5路由变量
路由的变量类型有字符类型、整型、slug 和 uuid,最为常用的是字符类型和整型。
- 各个类型说明如下:
- 字符类型:匹配任何非空字符串,但不含斜杠。如果没有指定类型,就默认使用该类型。
- 整型:匹配О和正整数。
- slug:可理解为注释、后缀或附属等概念,常作为路由的解释性字符。可匹配任何ASCII字符以及连接符和下画线,能使路由更加清晰易懂。比如网页的标题是“15岁的孩子”,其路由地址可以设置为“15-sui-de-hai-zi”。
- uuid:匹配一个uuid格式的对象。为了防止冲突,规定必须使用“”并且所有字母必须小写,例如175194d3-6885-437e-a8a8-6c231e272f00。
首先在urls.py中定义路由映射:
在views.py里定义bolog函数实现:
运行web页面即可实现一个带变量的路由
可添加多个路由变量:
urls.py:
views.py:
结果:
3.Django5正则路由
可通过正则表达式来约束路由变量
urls.py:
views.py:
错误结果:
正确结果:
需要注意的是:
①正则urls匹配,必须用re_path方法
②正则表达式?P开头是固定格式
4.Django5路由重定向
重定向称为HTTP协议重定向,也可以称为网页跳转,它对应的HTTP状态码为301、302、303、307、308。
网页重定向就是在浏览器访问某个网页的时候,这个网页不提供响应内容,而是自动跳转到其他网址,由其他网址来生成响应内容。
Django的网页重定向有两种方式:
①路由重定向(使用Django内置的视图类RedirectView实现的,默认支持HTTP的GET请求 )
②自定义视图的重定向(在自定义视图的响应状态设置重定向,能让开发者实现多方面的开发需求 )
4.1路由重定向
在urls.py里通过RedirectView实现
请求redirect
重定向到index
工作台可查看,状态为302
4.2自定义视图重定向
平时开发用的是自定义视图重定向,视图代码里,通过逻辑判断,通过redirect方法来实现具体的页面重定向,使用更加灵活。
自定义页面:
添加至资源文件集合:
修改逻辑,可使页面重定向
结果:
302状态,从blog/0跳转到error.html
其他id为正常页面
5.Django5命名空间namespace
可以采用命名空间namespace来对路由地址根据子项目分类
通过manage.py的startapp命令新建两个项目,user和order
为user添加urls和views
urls:
views:
为order添加urls和views
urls:
views:
在主项目下urls下添加映射:
结果:
include(('user.urls', 'user') 相当于找到user项目的urls.py文件。
namespace='user' 给这个映射取名是user,一般是根据项目名称来取。
第一个参数 'user/' 标识 user/开头的请求,都由user项目的urls.py去管理处理映射关系。
通过这种命名空间,我们可以把复杂项目的路由映射拆分,升级维护会方便很多。
6.Django5路由命名与反向解析reverse与resolve
在使用 reverse与resolve方法前,还需要给路由取名,否则无法找到需要的那个路由的信息。
reverse方法根据路由名称得到路由地址,resolve方法根据路由地址得到路由所有信息。
在order项目的urls.py里,对index/ 和list/请求路由分别取名index和list
修改views.py的index方法:
访问网址后
resolve返回对象属性介绍:
进行反向解析路由的时候,也可以带上路由实参,可以通过kwargs字典键值对,也可以通过args元组;
修改views.py的list方法
结果:
reverse方法:
- 必须参数viewname,以及一些可选参数:
-
viewname:代表路由命名或可调用视图对象,一般情况下是以路由命名name来生成路由地址的。
-
urlconf:设置反向解析的URLconf模块。默认情况下,使用配置文件 settings.py 的ROOT_URLCONF属性( 主项目文件夹的urls.py ).
-
args:以列表方式传递路由地址变量,列表元素顺序和数量应与路由地址变量的顺序和数量一致。
-
kwargs:以字典方式传递路由地址变量,字典的键必须对应路由地址变量名,字典的键值对数量与变量的数量一致。
-
current app:提示当前正在执行的视图所在的项目应用,主要起到提示作用,在功能上并无实质的作用。
-
resolve方法:
-
-
path:代表路由地址,通过路由地址来获取对应的路由对象信息。
-
urlconf:设置反向解析的_URLconf模块。默认情况下,使用配置文件 settings.py 的ROOT_URLCONF属性( 主项目文件夹的urls.py ).
-