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)

01  class FourDigitYearConverter:
02      regex = '[0-9]{4}'
03  
04      def to_python(self, value):
05          return int(value)
06  
07      def to_url(self, value):
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)

01  from django.urls import path
02  
03  from . import urlconverter, views 
04  
05  register_converter(urlconverter.FourDigitYearConverter, 'yyyy')
06  
07  urlpatterns = [
08      path('articles/2023/', views.special_case_2023),
09      path('articles/<yyyy:year>/', views.year_archive),
10      path('articles/<yyyy:year>/<int:month>/', views.month_archive),
11      path('articles/<yyyy:year>/<int:month>/<slug:slug>/', views.article_detail),
12      ...
13  ]

【代码分析】

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

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

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

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

  • 21
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值