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)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/21556.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

第一篇【传奇开心果系列】AI工业应用经典算法和Python示例:基于AI的智能制造技术经典算法与Python实践

传奇开心果博文系列 系列博文目录AI工业应用经典算法和Python示例系列 博文目录前言一、AI在智能制造方面的应用场景介绍二、基于AI的智能制造技术经典算法介绍三、支持向量机机器学习算法Python示例代码四、随机森林机器学习算法Python示例代码五、深度学习算法Python示例代码…

Facebook开户|Facebook公共主页疑难杂症详解

​​要要切克闹&#xff0c;公共主页我来道...哈喽呀家人们中午好&#xff0c;上一次学习还是在上一次..hhh相信很多家人在做Facebook的时候总会遇到各种各样匪夷所思的bug&#xff01;经常被搞心态吧&#xff01;那么咱们今天呢就来总结一下各类的bug以及解决方法&#xff0c;…

InvokeAI学习教程三:换脸

启动InvokeAI&#xff0c;我们先生成一张图&#xff1a; 在正向提示词里输入&#xff1a;Avant-garde couture, tactile textures, vogue aesthetics, vibrant color palette, intricate embroidery details, dramatic silhouettes 生成一张高贵夫人的图像&#xff0c; 或者你从…

标准发布 | 废水处理减污降碳协同评估指南(碳中和标准)

本文件主编单位&#xff1a;北京林业大学、北京交通大学、中国电建集团华东勘测设计研究院有限公司、 眉山市城投中恒能环保科技有限公司、 中华环保联合会水环境治理专业委员会。 本文件参编单位&#xff1a;中国市政工程中南设计研究总院有限公司、湖北君集环境科技股份有 公…

C++ B (1124) : 斐波那契数列第n项Plus

文章目录 一、题目描述二、参考代码 一、题目描述 二、参考代码 #include <iostream> #include <vector>using namespace std;const long long MOD 1e9 7; // 取模的值// 定义矩阵类 class Matrix { public:vector<vector<long long>> data;// 构造…

字节裁员!开启裁员新模式。。

最近&#xff0c;互联网圈不太平&#xff0c;裁员消息此起彼伏。而一向以“狼性文化”著称的字节跳动&#xff0c;却玩起了“低调裁员”&#xff0c;用一种近乎“温柔”的方式&#xff0c;慢慢挤掉“冗余”的员工。 “细水长流”&#xff1a;裁员新模式&#xff1f; 不同于以往…

【TB作品】MSP430F5529,单片机,打地鼠游戏

功能 针对这块开发板做了一个打地鼠游戏&#xff1a; 1 给单片机上电后&#xff0c;初始化显示界面&#xff0c;显示出分数和等级。 2 游戏是一轮一轮进行的&#xff0c;每一轮会以50%几率点亮板子上的五个小灯&#xff0c;表示地鼠露头需要打了。 3 一轮游戏开始后&#xff…

亚马逊又爆单了!做跨境电商就是靠选品!

其实亚马逊运营并不难&#xff0c;只要遵循亚马逊规则去做就不会有问题&#xff0c;亚马逊规则其实就是运营&#xff0c;但是&#xff01;难就难在选品&#xff01;我自己是做精品的&#xff0c;我自己明显的感觉就是&#xff0c;运营技术很厉害&#xff0c;但是好的产品面前一…

贪心算法拓展(反悔贪心)

相信大家对贪心算法已经见怪不怪了&#xff0c;但是一旦我们的决策条件会随着我们的步骤变化&#xff0c;我们该怎么办呢&#xff1f;有没有什么方法可以反悔呢&#xff1f; 今天就来讲可以后悔的贪心算法&#xff0c;反悔贪心。 https://www.luogu.com.cn/problem/CF865Dhttp…

C++栈、队列

文章目录 目录 文章目录 前言 一、stack、queue介绍 1.stack 2.queue 二、stack、queue的习题 1. 最小栈 2. 栈的压入、弹出序列 3.二叉树的层序遍历 三、stack和queue的模拟实现 1.stack的模拟实现 2.queue的模拟实现 前言 栈和队列是俩种特殊的容器&#xff0c;C在实现栈和队…

强达电路营收下滑净利润急剧放缓:周转率骤降,2次因环保被罚

《港湾商业观察》施子夫 自2022年6月向深交所创业板递交招股书起&#xff0c;深圳市强达电路股份有限公司&#xff08;以下简称&#xff0c;强达电路&#xff09;已收到深交所下发的两轮审核问询函&#xff0c;并且公司已于2023年3月31日顺利过会。但由于迟迟未提交注册申请&a…

无实验数据指导蛋白质定向进化,上海交大洪亮课题组发表微环境感知图神经网络 ProtLGN

在现代生物技术和医药研究中&#xff0c;蛋白质工程扮演着至关重要的角色。通过修改蛋白质的氨基酸序列&#xff0c;蛋白质工程可以改善或赋予蛋白质新的生物化学性质&#xff0c;如增强酶的催化效率、提高药物的亲和力或改善其热稳定性。这些改进对于开发新药、治疗疾病以及提…

lua vm 一: attempt to yield across a C-call boundary 的原因分析

使用 lua 的时候有时候会遇到这样的报错&#xff1a;“attempt to yield across a C-call boundary”。 1. 网络上的解释 可以在网上找到一些关于这个问题的解释。 1.1 解释一 这个 issue&#xff1a;一个关于 yield across a C-call boundary 的问题&#xff0c;云风的解释是…

【最新鸿蒙应用开发】——实用广告思路,可动态修改(方便运营)

鸿蒙项目加入广告展示页业务 广告页的思路——华为有广告业务&#xff0c;但是我们不用- ad模块&#xff1b; 想自定义广告——场景&#xff1a; app启动-有广告需求&#xff0c;就打开广告页&#xff0c;没有的话就去登录或者主页&#xff1b; 腾讯体育的广告- 启动有广告页…

适合小白学习的项目1894java开发ssm框架校园跑腿管理系统myeclipse开发mysql数据库springMVC模式java编程计算机网页设计

一、源码特点 java ssm 校园跑腿管理系统是一套完善的web设计系统&#xff08;系统采用SSM框架进行设计开发&#xff0c;springspringMVCmybatis&#xff09;&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采…

Java项目:96 springboot精品在线试题库系统

作者主页&#xff1a;舒克日记 简介&#xff1a;Java领域优质创作者、Java项目、学习资料、技术互助 文中获取源码 项目介绍 这次开发的精品在线试题库系统有管理员&#xff0c;教师&#xff0c;学生三个角色。 管理员功能有个人中心&#xff0c;专业管理&#xff0c;学生管理…

比较(二)利用python绘制雷达图

比较&#xff08;二&#xff09;利用python绘制雷达图 雷达图&#xff08;Radar Chart&#xff09;简介 雷达图可以用来比较多个定量变量&#xff0c;也可以用于查看数据集中变量的得分高低&#xff0c;是显示性能表现的理想之选。缺点是变量过多容易造成阅读困难。 快速绘制…

网站入门:Flask用法讲解

Flask是一个使用Python编写的轻量级Web服务框架&#xff0c;旨在帮助开发人员快速构建和部署Web应用程序。下面将对Flask进行更为详细的解释说明&#xff0c;并展示其使用示例与注意事项&#xff1a; 1.解释说明 定义及特点: Flask以其简洁和灵活著称&#xff0c;允许开发者以…

C++:list模拟实现

hello&#xff0c;各位小伙伴&#xff0c;本篇文章跟大家一起学习《C&#xff1a;list模拟实现》&#xff0c;感谢大家对我上一篇的支持&#xff0c;如有什么问题&#xff0c;还请多多指教 &#xff01; 如果本篇文章对你有帮助&#xff0c;还请各位点点赞&#xff01;&#xf…

LeetCode题练习与总结:二叉树展开为链表--114

一、题目描述 给你二叉树的根结点 root &#xff0c;请你将它展开为一个单链表&#xff1a; 展开后的单链表应该同样使用 TreeNode &#xff0c;其中 right 子指针指向链表中下一个结点&#xff0c;而左子指针始终为 null 。展开后的单链表应该与二叉树 先序遍历 顺序相同。 …