django动态路由_路由器可以当转换器用吗

django动态路由_路由器可以当转换器用吗自定义路径转换器有时候上面的内置的url转换器并不能满足我们的需求,因此django给我们提供了一个接口可以让我们自己定义自己的url转换器django内置的路径转换器源码解析在我们自定义路由转

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

自定义路径转换器

有时候上面的内置的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://javaforall.net/166178.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 异步fifo的10个测试关注点_异步FIFO

    异步fifo的10个测试关注点_异步FIFO1、异步FIFO简介及其原理FIFO是英文FirstInFirstOut的缩写,是一种先进先出的数据缓存器,它与普通存储器的区别是没有外部读写地址线,这样使用起来非常简单,但缺点就是只能顺序写入数据。异步FIFO是指读写时钟不一致,读写时钟是互相独立的。1.1用途用途1:  跨时钟域:异步FIFO读写分别采用相互异步的不同时钟。在现代集成电路芯片中,随着设计规模的不断扩大,一个系统中往往含有数个时钟,多时钟域带来的一个问题就是,如何设计异步时钟之间的接口电路。异步FIFO是这个问题的一

    2022年8月13日
  • 【Cocos2d-x】Mac 在 Cocos2d-x 3.X 打包Android

    【Cocos2d-x】Mac 在 Cocos2d-x 3.X 打包Android

    2022年1月12日
  • VC编程来操纵Office[通俗易懂]

    VC编程来操纵Office[通俗易懂]使用VC编程来操纵Office。你可以实现诸如:Word文件打印、传送数据到Word文档、发送E-MAIL、自动产生表格、Excel数据统计、圆饼图,直方图显示、自动报表生成、播放幻灯、doc,txt,HTML,rtf文件转换、中文简繁体转换、拼音或笔画排序……只要是Office能够实现的功能,都可以在你写的程序中调用。仔细阅读下面的说明,并下载源文件进行参考,你就可以一步一步地掌握这个技

    2022年6月16日
  • RCEP是什么协议_常用的隧道协议有哪些

    RCEP是什么协议_常用的隧道协议有哪些本发明涉及通信技术领域,特别是涉及一种对同一隧道下主LSP和HotLSP的识别方法、PCEP协议及计算机存储介质。背景技术:随着软件定义网络(SoftwareDefinedNetwork,SDN)技术的发展,路径计算单元(PathComputationElement,PCE)不仅仅是作为集中算路的服务组件,还可以主动的对已经建立的隧道进行动态规划和调优工作。draft-ietf-pce-…

    2022年9月7日
  • 数字时钟校时功能_公务员考试考场有钟表吗

    数字时钟校时功能_公务员考试考场有钟表吗数字时钟系统—标准化考场自动校时同步时钟

    2022年8月3日
  • 计算机编程原理_如何编程

    计算机编程原理_如何编程一、Socket简介Socket是进程通讯的一种方式,即调用这个网络库的一些API函数实现分布在不同主机的相关进程之间的数据交换。几个定义:(1)IP地址:即依照TCP/IP协议分配给本地主机的网络地址,两个进程要通讯,任一进程首先要知道通讯对方的位置,即对方的IP。(2)端口号:用来辨别本地通讯进程,一个本地的进程在通讯时均会占用一个端口号,不同的进程端口号不同,因此在通

    2022年10月17日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号