gpt4 book ai didi

Django实现自定义路由转换器

转载 作者:qq735679552 更新时间:2022-09-27 22:32:09 25 4
gpt4 key购买 nike

CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.

这篇CFSDN的博客文章Django实现自定义路由转换器由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.

自定义路径转换器

有时候上面的内置的url转换器并不能满足我们的需求,因此django给我们提供了一个接口可以让我们自己定义自己的url转换器 。

django内置的路径转换器源码解析

在我们自定义路由转换器之前,我们先查看一下django内置的那些路由转换器怎么写的,源码路径from django.urls 。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
import converters
 
class IntConverter:
     regex = '[0-9]+'
 
     def to_python( self , value):
         return int (value)
 
     def to_url( self , value):
         return str (value)
 
 
class StringConverter:
     regex = '[^/]+'
 
     def to_python( self , value):
         return value
 
     def to_url( self , value):
         return value
 
 
class UUIDConverter:
     regex = '[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}'
 
     def to_python( self , value):
         return uuid.UUID(value)
 
     def to_url( self , value):
         return str (value)
 
 
class SlugConverter(StringConverter):
     regex = '[-a-zA-Z0-9_]+'
 
 
class PathConverter(StringConverter):
     regex = '.+'
 
 
DEFAULT_CONVERTERS = {
     'int' : IntConverter(),
     'path' : PathConverter(),
     'slug' : SlugConverter(),
     'str' : StringConverter(),
     'uuid' : UUIDConverter(),
}
 
 
REGISTERED_CONVERTERS = {}
 
 
def register_converter(converter, type_name):
     REGISTERED_CONVERTERS[type_name] = converter()
     get_converters.cache_clear()

从上面我们可以非常分析的看到,django内置的路径转换器是先定义了一个类,类中定义了一个类属性regex作为正则表达式的值,然后定义了2个方法to_python和to_url,最后定义了一个register_converter函数,将路径转换器注册到django中去 。

我们这里给他划分为5步:

1.创建一个converters.py,在文件中定义一个类。 2.在类中定义一个属性regex,这个属性是用来保存url转换器规则的正则表达式。 3.实现to_python(self,value)方法,这个方法是将url中的值转换一下,然后传给视图函数的。 4.实现to_url(self,value)方法,这个方法是在做url反转的时候,将传进来的参数转换后拼接成一个正确的url。 5.将定义好的转换器,注册到django中.

小案例

接下来我们自己定义一个转换器,满足4位数字的路径匹配 新建一个converters.py文件,代码如下:

?
1
2
3
4
5
6
7
8
9
class FourDigitYearConverter:
     # 定义正则表达式
     regex = '[0-9]{4}'
 
     def to_python( self , value):
         return value
 
     def to_url( self , value):
         return '%04d' % value

在urls.py文件下注册自定义的转换器 。

?
1
2
3
4
5
6
from django.urls import path,  converters
# 注册自定义转换器
register_converter(converters.FourDigitYearConverter, 'yyyy' # yyyy是自定义转换器的类型名称
urlpatterns = [
   path( 'articles/<yyyy:year>' , views.articles_yyyy),
]

这样我们就可以匹配4位数字的url地址了 。

到此这篇关于Django实现自定义路由转换器的文章就介绍到这了,更多相关Django 路由转换器内容请搜索我以前的文章或继续浏览下面的相关文章希望大家以后多多支持我! 。

原文链接:https://www.cnblogs.com/jiakecong/p/14765502.html 。

最后此篇关于Django实现自定义路由转换器的文章就讲到这里了,如果你想了解更多关于Django实现自定义路由转换器的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com