Django的PATH路径转换器

打印 上一主题 下一主题

主题 556|帖子 556|积分 1668

本书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转换器就是一个类,主要包罗下面的成员和属性:

  • 类属性regex:一个字符串情势的正则表达式属性。
  • to_python(self, value)方法:一个用来将匹配到的字符串转换为目标数据范例并通报给视图函数的方法。留意,如果转换失败,则该方法必须弹出ValueError异常。
  • 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/<yyyy:year>/', views.year_archive),
  10. 10      path('articles/<yyyy:year>/<int:month>/', views.month_archive),
  11. 11      path('articles/<yyyy:year>/<int:month>/<slug:slug>/', 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)


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

汕尾海湾

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表