Django实现自定义路由转换器
作者:Silent丿丶黑羽 时间:2021-09-10 05:49:04
自定义路径转换器
有时候上面的内置的url转换器并不能满足我们的需求,因此django给我们提供了一个接口可以让我们自己定义自己的url转换器
django内置的路径转换器源码解析
在我们自定义路由转换器之前,我们先查看一下django内置的那些路由转换器怎么写的,源码路径from django.urls
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文件,代码如下:
class FourDigitYearConverter:
# 定义正则表达式
regex = '[0-9]{4}'
def to_python(self, value):
return value
def to_url(self, value):
return '%04d' % value
在urls.py文件 * 册自定义的转换器
from django.urls import path, converters
# 注册自定义转换器
register_converter(converters.FourDigitYearConverter, 'yyyy') # yyyy是自定义转换器的类型名称
urlpatterns = [
path('articles/<yyyy:year>', views.articles_yyyy),
]
这样我们就可以匹配4位数字的url地址了
来源:https://www.cnblogs.com/jiakecong/p/14765502.html
标签:Django,路由转换器
![](/images/zang.png)
![](/images/jiucuo.png)
猜你喜欢
在Windows服务器下用Apache和mod_wsgi配置Python应用的教程
2021-10-28 22:36:17
细化解析:怎样把你的MySQL完全中文化
2008-12-19 17:48:00
Oracle教程 误添加数据文件删除方法
2009-08-04 12:38:00
python k-近邻算法实例分享
2022-03-26 14:47:17
如何提高ASP的效率?
2010-06-07 20:52:00
Python实现把json格式转换成文本或sql文件
2022-06-03 14:52:23
Python实现读取目录所有文件的文件名并保存到txt文件代码
2023-08-28 19:27:51
详解Python 中的容器 collections
2021-09-12 07:11:38
Python 如何实现变量交换
2021-07-03 12:48:20
python+pyqt实现12306图片验证效果
2023-11-02 07:28:18
![](https://img.aspxhome.com/file/2023/7/71387_0s.jpg)
全新极速CSS选择器引擎whiz
2009-08-30 15:48:00
![](https://img.aspxhome.com/file/UploadPic/20098/30/_js-36s.gif)
PHP.vs.JAVA
2023-11-17 20:28:51
![](https://img.aspxhome.com/file/2023/2/85872_0s.jpg)
python爬虫爬取微博评论案例详解
2022-12-23 13:31:53
![](https://img.aspxhome.com/file/2023/7/92497_0s.png)
前后端分离和跨域问题的详细解决方案(CORS的原理)
2023-05-30 01:19:26
![](https://img.aspxhome.com/file/2023/7/55307_0s.png)
python requests抓取one推送文字和图片代码实例
2023-10-26 23:11:16
详解Python遍历字典的键和值
2021-07-19 23:02:14
![](https://img.aspxhome.com/file/2023/6/71996_0s.png)
PHP中的排序函数sort、asort、rsort、krsort、ksort区别分析
2023-11-23 11:50:55
python math模块使用方法介绍
2021-06-20 23:44:01
Golang导入包的几种方式(点,别名与下划线)
2023-09-17 23:09:42
利用CSS属性实现进度条的方式
2010-02-25 12:31:00