• Django的PATH路径转换器


    本书1-7章样章及配套资源下载链接:

    https://pan.baidu.com/s/1OGmhHxEMf2ZdozkUnDkAkA?pwd=nanc 

    源码、PPT课件、教学视频等,可以从前言给出的下载信息下载,大家可以评估一下。

    Django框架中,默认内置了一组PATH路径转换器,具体介绍如下:

    • str类型转换器:匹配任何非空字符串,但是不包含特殊字符“/”;如果设计人员没有指定专门的转换器,默认就是使用该转换器。
    • int类型转换器:匹配0和正整数,返回一个int类型。
    • slug类型转换器:可理解为注释、后缀、附属等概念,主要是URL链接中置于最后一部分的解释性字符。该转换器匹配任何ASCII字符以及连接符和下画线,如【代码4-2】中的字符串“django-url-pattern”。
    • uuid类型转换器:匹配一个UUID格式的对象。为了防止冲突,规定必须使用中画线(-),并且所有字母必须小写,例如,下面这个UUID字符串01234567-8900-aacc-a8a8-987654321000将返回一个uuid对象。
    • path类型转换器:匹配任何非空字符串,重点是可以包含路径分隔符(/);这个转换器适用于匹配整个URL链接,而不是一段一段的URL字符串。同时,要注意区分path转换器和path()方法二者之间的区别。对于更复杂的匹配需求,设计人员可能就需要自定义path转换器了。其实,path转换器就是一个类,主要包含下面的成员和属性:
    1. 类属性regex:一个字符串形式的正则表达式属性。
    2. to_python(self, value)方法:一个用来将匹配到的字符串转换为目标数据类型并传递给视图函数的方法。注意,如果转换失败,则该方法必须弹出ValueError异常。
    3. to_url(self, value)方法:一个将Python数据类型转换为一段URL地址的方法,为to_python(self, value)方法的反向操作。注意,如果转换失败,则该方法也会弹出ValueError异常。

    下面介绍一个关于PATH路径转换器的代码实例。

    首先,新建一个用于PATH路径转换的Python文件,定义一个用于转换4位正整数年份数值的类FourDigitYearConverter,具体代码如下:

    【代码4-3】(详见本书配套下载资源中的源代码中的urlconverter.py)

    1. 01 class FourDigitYearConverter:
    2. 02 regex = '[0-9]{4}'
    3. 03
    4. 04 def to_python(self, value):
    5. 05 return int(value)
    6. 06
    7. 07 def to_url(self, value):
    8. 08 return '%04d' % value

    【代码分析】

    在第02行代码定义了类属性regex,格式为4位整数的正则表达式。

    在第04、05行代码定义了类方法to_python(),用于将4位整数(value)转换为Python数据类型。

    在第07、08行代码定义了类方法to_url(),用于将Python数据类型转换为URL地址,并进行了格式化操作(使用数字“0”从左填充的4位整数)。

    然后,基于【代码4-3】进行修改,在URLconf模块中使用register_converter()方法进行注册,具体代码如下:

    【代码4-4】(urlconf.py)

    1. 01 from django.urls import path
    2. 02
    3. 03 from . import urlconverter, views
    4. 04
    5. 05 register_converter(urlconverter.FourDigitYearConverter, 'yyyy')
    6. 06
    7. 07 urlpatterns = [
    8. 08 path('articles/2023/', views.special_case_2023),
    9. 09 path('articles//', views.year_archive),
    10. 10 path('articles///', views.month_archive),
    11. 11 path('articles////', views.article_detail),
    12. 12 ...
    13. 13 ]

    【代码分析】

    在第05行代码中,通过register_converter()方法注册了一个“yyyy”类型。

    第07~13行代码定义了urlpatterns数组列表。其中,第09行、第10行和第11行中关于年份的类型使用了“yyyy”进行定义。

    本文节选自《Django 5企业级Web应用开发实战(视频教学版)》,获出版社和作者授权发布。

    《Django 5企业级Web应用开发实战(视频教学版)》(王金柱)【摘要 书评 试读】- 京东图书 (jd.com)

  • 相关阅读:
    QT集成Protobuf
    前缀和数组系列
    算法沉淀——穷举、暴搜、深搜、回溯、剪枝综合练习二(leetcode真题剖析)
    conan 入门指南
    代码随想录刷题|完全背包理论基础 LeetCode 518. 零钱兑换II 377. 组合总和 Ⅳ
    设计模式学习笔记(二)工厂模式、模板模式和策略模式的混合使用
    【EI会议征稿】2024年第四届消费电子与计算机工程国际学术会议(ICCECE 2024)
    STM32WB55 BLE双核flash擦写程序深度解析
    协程理解1
    2021年Javascript最常见的面试题以及答案
  • 原文地址:https://blog.csdn.net/brucexia/article/details/139409827