django路由管理
- 普通路由
- 参数路由
- 正则路由
- 正则参数路由
- 分布式路由
路由的定义
所有django的路由,都必须定义在 路由管理器 urls.py urlpatterns 列表中
在 urlpatterns 中,通过定义 路由 可以使用 path 函数
from django.urls import path
path(route, view, kwargs, name)
- route : 定义路由的地址、是一个 字符串,不能以 / 开头
- view : 视图函数、是由 python的函数来充当的
- kwargs: 是一个字典格式的数据、是给视图函数设置额外的参数,不常用
- name : 定义路由的对应的名称、通过路由名称进行路由的反向解析找到对应的路由
普通路由
- 普通路由、通过 path 来定义、route 是一个普通的字符串
参数路由
- 参数路由、通过 path 函数来定义的,route 中包含
<key>
或者<type:key>
占位符
type常见的类型
- str : 默认值, str可以匹配除 / 之外的所有字符
- int : 会将传入的值自动转为 int类型
- slug: 可以匹配 由 数字、字母、下划线、和中划线 组成的字符串
- path: 除换行符以外的所有字符
- uuid: 匹配 uuid格式的字符串
自定义参数路由中的类型转换器
django 内置的所有类型转换器 都在 converters.py 中, 可以通过 CTRL + N 或者 shift + shift
-
- 在 django的核心包下、新建一个 converters.py (名字不是固定的、约定俗成), 代码如下
class YearConverter:
regex = r'(19|20)\d{2}'
def to_python(self, value):
return int(value)
def to_url(self, value):
return str(value)
-
- 将自定义的类型转换器注册到 django 中
# 打开 django项目的 核心包 对应的 __init__.py 、完成自定义类型转换器的注册
from django.urls.converters import register_converter
from .converters import YearConverter
# 注册自定义的类型转换器
register_converter(YearConverter, "yyyy")
-
- 在 参数路由中使用自定义的 yyyy 转换器
urlpatterns = [
...
path("query/<yyyy:year>", query, name="query")
]