Django实现自定义路由转换器

 更新时间:2021年05月14日 09:41:40   作者:Silent丿丶黑羽  
有时候上面的内置的url转换器并不能满足我们的需求,因此django给我们提供了一个接口可以让我们自己定义自己的url转换器,那么如何实现,本文就来介绍一下

自定义路径转换器

有时候上面的内置的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地址了

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

相关文章

  • 利用anaconda保证64位和32位的python共存

    利用anaconda保证64位和32位的python共存

    这篇文章主要为大家详细介绍了利用anaconda保证64位和32位的python共存,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-06-06
  • python实现使用遗传算法进行图片拟合

    python实现使用遗传算法进行图片拟合

    最近做项目需要图像拟合,本文主要介绍了python实现使用遗传算法进行图片拟合,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-03-03
  • Python中*args和**kwargs的作用

    Python中*args和**kwargs的作用

    *args和**kwargs,以及单独的*,**到底是啥作用呢?原理是啥呢?读完这篇文章你就彻底明白了,感兴趣的朋友跟随小编一起看看吧
    2023-11-11
  • 中秋将至利用python画一些月饼从天而降不用买了

    中秋将至利用python画一些月饼从天而降不用买了

    中秋没两天就要到了,今天小编就利用python画个月饼的小游戏,文中内容非常详细,感兴趣的小伙伴一定要收藏起来送给远方的朋友呀
    2021-09-09
  • Python使用腾讯云API实现短信验证码功能

    Python使用腾讯云API实现短信验证码功能

    使用Python与腾讯云接口对接,实现短信验证码功能变得非常简单,只需要几行代码就能够轻松实现短信的发送,无须关心复杂的短信协议和底层实现,读者可以根据自己的实际需求,灵活使用腾讯云短信SDK提供的API来实现更丰富的短信功能
    2024-01-01
  • 教你利用python如何读取txt中的数据

    教你利用python如何读取txt中的数据

    们使用python的时候经常需要读取txt文件中的内容,下面这篇文章主要给大家介绍了关于利用python如何读取txt中数据的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-03-03
  • 使用Python统计代码运行时间的两种方法

    使用Python统计代码运行时间的两种方法

    有时候我们需要记录一个程序运行的时间,下面这篇文章主要给大家介绍了关于使用Python统计代码运行时间的两种方法,文中通过图文以及示例代码介绍的非常详细,需要的朋友可以参考下
    2022-12-12
  • 33个Python爬虫项目实战(推荐)

    33个Python爬虫项目实战(推荐)

    这篇文章主要介绍了33个Python爬虫项目实战,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-07-07
  • 分享一下如何编写高效且优雅的 Python 代码

    分享一下如何编写高效且优雅的 Python 代码

    这篇文章主要介绍了分享一下如何编写高效且优雅的 Python 代码,需要的朋友可以参考下
    2017-09-09
  • 详解如何使用Python实现过滤指定进程

    详解如何使用Python实现过滤指定进程

    Python提供了多种方式来实现对进程的过滤和操作,本文将介绍如何利用Python来过滤指定进程,并展示一些实用的技巧和方法,希望对大家有所帮助
    2024-04-04

最新评论