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地址了
 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/165472.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 使用ROW_NUMBER()查询:列名 ‘RowNumber’ 无效。(转载)

    使用ROW_NUMBER()查询:列名 ‘RowNumber’ 无效。(转载)原文地址:https://my.oschina.net/wangzan/blog/202456使用ROW_NUMBER()方法查询结果集;语句如下: selectROW_NUMBER()OVER(ORDERBYdbo.OrderOutProduct.ID)ASRowNumber,dbo.Order.ID,Telephone,AddressCity,Province,fromdbo…

  • windows,cmd中进行盘符的切换「建议收藏」

    windows,cmd中进行盘符的切换「建议收藏」需求描述:  在工作中,有的时候需要在cmd中进行盘符的切换,以前总有些时候 通过cd来切,就是切换不过去,每次都要进行百度查询,所以,这次就记录下,  留着以后再用。操作过程:1.通过win+r->cmd的方式进入到cmd命令行中2.通过盘符加冒号的方式,切换到不同的磁盘根目录下,举例:切换到d盘下,执行d:然后按回车备注:此时,就切换到了D盘的根…

  • Python绘图库Matplotlib.pyplot之网格线设置(plt.grid())「建议收藏」

    Python绘图库Matplotlib.pyplot之网格线设置(plt.grid())「建议收藏」很多时候为了可视化效果的美观,就不得不从细节上下手,这里我们就介绍一下这些细节之一的网格线。首先导入需要用到的库,matplotlib.pyplot是必须的,Numpy是为了生成画布用的。importnumpyasnpimportmatplotlib.pyplotasplt生成网格plt.gcf().set_facecolor(np.ones(3)*240/…

  • 从闭包函数的变量自增的角度 – 解析js垃圾回收机制

    从闭包函数的变量自增的角度 – 解析js垃圾回收机制

  • 上位机控制plc输出教程_上位机读取plc

    上位机控制plc输出教程_上位机读取plc图解PLC编程入门可编程逻辑控制器是种专门为在工业环境下应用而设计的数字运算操作电子系统,它采用一种可编程的存储器在其内部存储执行逻辑运算、顺序控制、定时、计数和算术运算等操作的指令,通过数字式或模拟式的输入输出来控制各种类型的机械设备或生产过程。PLC的定义可编程序控制器是一种数字运算操作电子系统,专为在工业环境下应用而设计。它采用了可编程序的存储器,用来在其内部存储执行逻辑运算、顺序控制、定时…

  • plotyy函数_Matlab plotyy函数的使用及问题总结「建议收藏」

    plotyy函数_Matlab plotyy函数的使用及问题总结「建议收藏」Matlabplotyy函数的使用及问题总结1.新建一个.m文件,文件名为plotyy.m,并为其填写代码如下:x=0:0.001:20;y1=200*exp(-0.05*x).*sin(x);y2=0.8*exp(-0.5*x).*sin(10*x);holdon;[AX,H1,H2]=plotyy(x,y1,x,y2,@plot);%获取坐标轴、图像句柄set(get(AX(1),’yl…

发表回复

您的电子邮箱地址不会被公开。

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