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_pythonto_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/165472.html原文链接:https://javaforall.net

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


相关推荐

  • KL散度、JS散度、Wasserstein距离[通俗易懂]

    KL散度、JS散度、Wasserstein距离[通俗易懂]1.KL散度KL散度又称为相对熵,信息散度,信息增益。KL散度是是两个概率分布P和Q差别的非对称性的度量。KL散度是用来度量使用基于Q的编码来编码来自P的样本平均所需的额外的位元数。典型情况下,P表示数据的真实分布,Q表示数据的理论分布,模型分布,或P的近似分布。定义如下:DKL(P//Q)=−∑x∈XP(x)log1P(x)+∑x∈XP(x)log1Q(x)DKL(…

    2022年4月19日
    114
  • pc端、手机端浏览器、微信内.点击返回键,返回到上一个页面浏览的位置的实现

    pc端、手机端浏览器、微信内.点击返回键,返回到上一个页面浏览的位置的实现pc端、手机端浏览器、微信内.点击返回键,返回到上一个页面浏览的位置的实现

    2022年4月24日
    148
  • 分布式应用技术

    分布式应用技术

    2021年9月15日
    49
  • GitHub下载慢的懒人解决方案「建议收藏」

    推荐Github下载插件:Fast-Github

    2022年4月15日
    39
  • 硬件设计——外围电路(电源电路)[通俗易懂]

    硬件设计——外围电路(电源电路)[通俗易懂]引言 当我们设计一个完整的电路而言,我们除了要知道我们要设计的主芯片电路,如FPGA,DSP,还要知道一些外围电路,如电源电路,复位电路、晶振电路等等。这篇文章我们先来讲解一下对于如何设计一个电源电路。 正文 首先我们查询主芯片的datesheet,根据datesheet,可知主芯片采用多大的电压才能正常工作,然后我们根据其设计电源电路。每个电子设备都有一个供给能量的电源电路。电源电路有整流电源、逆变电源和变频器三种。常见的家用电器中多数要用到直流电源。直流电源的最简单的供电方法是用电池。..

    2022年5月6日
    71
  • Kubernetes搭建spinnaker服务

    Kubernetes搭建spinnaker服务背景 2017 2018 年左右的吧 不记得看什么了看到了 spinnaker 但是当时真的安装不起来 各种被墙裂 2020 年底学习了泽阳大佬的 spinnaker 实践课程 通过 Halyard 方式搭建了 spinnaker 的集群 并与 jenkinsgitla 完成了集成 2021 年初稍微玩了一下 就去整别的事情去了 没有能应用于线上环境 下半年了 jenkinsk8s 这些的流程现在基本都是清晰了 想把 cd 从 jenkins 中剥离出来教给 spinnaker 了 就重新温习一下 spinnak

    2025年12月2日
    3

发表回复

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

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