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

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


相关推荐

  • 在同一台电脑上同时安装Python2和Python3

    在同一台电脑上同时安装Python2和Python3

    2021年10月16日
    40
  • 教师职称考计算机模块,2015教师职称计算机考试模块.doc

    教师职称考计算机模块,2015教师职称计算机考试模块.doc2015教师职称计算机考试模块2015年教师职称计算机考试模块【职考宝典】为广大考生归纳2015年职称计算机考试模块,让考生提前进入考试氛围,了解考试题型,职考宝典涵盖面积广,模拟题库包含Internet应用,word2003、2007,winXP、wpsoffice、excel2003、2007,ppt2003、2007等。山东、广东、安徽、内蒙古、黑龙江、湖南、山西、云南、辽宁、新疆、浙江…

    2022年5月5日
    48
  • 阿里云服务器中了挖矿程序应该如何清除「建议收藏」

    阿里云服务器中了挖矿程序应该如何清除「建议收藏」阿里云服务器中了挖矿程序如何处理?云安全中心安全告警短信提醒云服务器中了挖矿程序怎么处理?护云盾来详细说下阿里云服务器挖矿程序的解决方法,一种是使用云安全中心自动处理,另一种方式是自行手动清除。阿里云服务器挖矿程序解决方法如果你的阿里云服务器中了挖矿程序,你有两种处理方式,一种是使用云安全中心自动清理,另一种是手动清除:云安全中心处理挖矿程序1、登录到云安全中心控制台2、左侧栏,选择“威胁检测”–“安全告警处理”在安全告警处理列表中,找到挖矿程序,然后点“处理”云安全中心安

    2022年6月22日
    161
  • python之初接触

    编程语言相关1什么是编程语言2 编程语言的分类以及优缺点编程语言从诞生开始到现在大致经历了三个阶段:机器语言汇编语言高级语言解释类:执行方式类似于我们日常生活中的“同声翻译”,应

    2022年3月29日
    72
  • excel怎么锁定部分单元格不被修改_如何锁定一部分单元格

    excel怎么锁定部分单元格不被修改_如何锁定一部分单元格https://jingyan.baidu.com/article/d45ad1486e094569552b8004.html保护Excel工作表我们通常会用审阅保护工作表,这样来保护全部的工作表内

    2022年8月6日
    10
  • 十八、职责链模式-推卸责任,不关我的事,我不管!#和设计模式一起旅行#

    不在其位,不谋其政! –出自《论语·泰伯》故事背景在现实世界中,有很多情况下会遇到一些推卸责任的场景,比如要办理一件事的时候,被告诉你要去做个做这个事情,但是去了这个地方,确告诉要到另一个地方去,最后搞了很久,才办完这一件事。这种情况下,就可以简单的称为踢皮球,也就是推卸责任。在软件中,当外部请求程序进行某个出来,这个程序无法处理就把该请求转给其他对象负责,当对个对象组…

    2022年2月27日
    36

发表回复

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

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