学习笔记,仅供参考

参考自:Django打造大型企业官网;

本系列Blog以应用为主,理论基础部分我在后端专栏的Django系列博客已经写过了,如果有些需要补充的知识点,我会在这个系列中,尽量详细的写一下。


自定义path转换器

path转换器

记得我们以前学习path函数时用的 <int:id>么 ,其中的int就是path转换器,它的底层实现是这样的:

class IntConverter:regex = '[0-9]+'def to_python(self, value):return int(value)def to_url(self, value):return str(value)

在这个IntConverter类中它有三个组成部分:

  • 第一部分(regex):正则表达式限制路由规则,在这里,Django规定只能输入数字;

  • 第二部分(to_python):将得到的路径按照一定的规则,转换成统一类型,返回给服务端,在这里,Django将url中得到的str类型参数,转换为int类型参数传递给视图函数;

  • 第三部分(to_url):在进行url反转时,视图函数会将某个形式的数据,转换为特定形式的参数,并将其传递给特定的路由,在这里,Django会将int类型参数转换为str类型的参数,并将str类型的参数传递给特定的路由。

to_python方法相当于做了与to_url方法相反的工作。

自定义path转换器

现在,我想在url中以书名1+书名2+书名3的方式传递参数,并在视图函数中以列表的形式拿到参数,即[书名1, 书名2, 书名3]

首先,在newwebsite1项目下,我们创建converters.py文件,并该模块中放我们的自定义path转换器类:

from django.urls import converters,register_converterclass CategoryConverter(object):regex = r'\w+|(\w+\+\w+)+'def to_python(self,value):# python+django+flask# ['python','django','flask']result = value.split("+")return resultdef to_url(self,value):# value:['python','django','flask']# python+django+flaskif isinstance(value,list):result = "+".join(value)return resultelse:raise RuntimeError("转换url的时候,分类参数必须为列表!")register_converter(CategoryConverter,'cate')
#注册
#CategoryConverter为自定义path转换器类
#cate为我们给自定义path转换器起的类名

那么我们该如何让这个自定义path转换器生效呢?

我们知道 __init__.py模块用于初始化包,即当我们导入某个包时,python就会执行 __init__.py文件,所以,我们可以将converters.py模块导入到__init__.py模块中:

from . import converters

当我们导入converters.py模块时,python就会马上执行converters.py文件中的代码,我们的自定义path转换器就会被注册。

现在,我们在主urls.py中敲入如下代码:

from django.contrib import admin
from django.urls import path, converters
from . import views
from django.conf.urls import includeurlpatterns = [path('admin/', admin.site.urls),path('', views.baidu),path('login/', views.login, name = "signin"),path('book/', include('book.urls')),path('cms1/', include('cms.urls', namespace = "cms1")),path('cms2/', include('cms.urls', namespace = "cms2")),path('front/', include('front.urls')),path('test01/<cate:my_books>/', views.test01),
]

views.py中定义视图函数:

def test01(request, my_books):html = "<h2>我有如下书籍:{}</h2>".format(my_books)return HttpResponse(html)

我们向服务器发起请求:

Very Well !

Django从理论到实战(part15)--自定义path转换器相关推荐

  1. Django从理论到实战(part21)--自定义模板过滤器

    学习笔记,仅供参考 参考自:Django打造大型企业官网–Huang Y: 本系列Blog以应用为主,理论基础部分我在后端专栏的Django系列博客已经写过了,如果有些需要补充的知识点,我会在这个系列 ...

  2. Django从理论到实战(part41)--WSGIRequest对象

    学习笔记,仅供参考,有错必纠 参考自:Django打造大型企业官网–Huang Y: 文章目录 WSGIRequest对象 WSGIRequest对象常用属性 WSGIRequest对象常用方法 WS ...

  3. Django从理论到实战(part8)--URL中添加参数

    学习笔记,仅供参考 参考自:Django打造大型企业官网: 本系列Blog以应用为主,理论基础部分我在后端专栏的Django系列博客已经写过了,如果有些需要补充的知识点,我会在这个系列中,尽量详细的写 ...

  4. Django从理论到实战(part9)--path和re_path

    学习笔记,仅供参考 参考自:Django打造大型企业官网: 本系列Blog以应用为主,理论基础部分我在后端专栏的Django系列博客已经写过了,如果有些需要补充的知识点,我会在这个系列中,尽量详细的写 ...

  5. Django从理论到实战(part25)--数据库操作

    学习笔记,仅供参考 参考自:Django打造大型企业官网–Huang Y: 本系列Blog以应用为主,理论基础部分我在后端专栏的Django系列博客已经写过了,如果有些需要补充的知识点,我会在这个系列 ...

  6. Django从理论到实战(part7)--关于视图函数与URL映射

    学习笔记,仅供参考 参考自:Django打造大型企业官网:URL映射 本系列Blog以应用为主,理论基础部分我在后端专栏的Django系列博客已经写过了,如果有些需要补充的知识点,我会在这个系列中,尽 ...

  7. Django从理论到实战(part54)--MEDIA_ROOT和MEDIA_URL

    学习笔记,仅供参考,有错必纠 引用:使用模型来处理上传的文件:Django static静态配置文件 MEDIA_ROOT和MEDIA_URL 变量解释 MEDIA_ROOT:指定用户上传文件的本地路 ...

  8. Django从理论到实战(part50)--使用模型来处理上传的文件

    学习笔记,仅供参考,有错必纠 文章目录 使用模型来处理上传的文件 `MEDIA_ROOT`和`MEDIA_URL` 限制文件的扩展名 使用模型来处理上传的文件 在定义模型的时候,我们可以给存储文件的字 ...

  9. Django从理论到实战(part48)--Django表单

    学习笔记,仅供参考,有错必纠 参考自:某网课 文章目录 Django表单 Django表单概述 HTML中的表单 Django中的表单 Django中表单使用流程 表单验证 常用的Field 常用验证 ...

最新文章

  1. 您现在只需免费与相机捆绑即可购买一个PSVR
  2. CTFshow 命令执行 web120
  3. 如何用Linux的命令正确识别cpu的个数和核数
  4. 如何使用RichEdit
  5. SyntaxError: ‘return‘ outside function 在python里面的报错问题
  6. C语言,利用条件语句判断是否为三角形并输出面积
  7. 使用 Kustomize 帮你管理 kubernetes 应用(二): Kustomize 的使用方法
  8. 洛谷 P3396 哈希冲突 解题报告
  9. Ubuntu 下 libev编译安装
  10. pycocotools/_mask.c:no such file or directory
  11. Cocos2d JS 之消灭星星(十) 关卡配置
  12. jQuery学习笔记03
  13. linux 截图软件安装,Ubuntu 安装截图工具Shutter,并设置快捷键 Ctrl+Alt+A
  14. 苹果手机左上角的数字怎么弄_一键更改手机IP操作方法
  15. Andriod7.0之wifi开启流程(含流程框图及流程图)
  16. 推荐一个有效清理电脑桌面广告、流氓软件的方法
  17. php无版权图库api,12个无版权限制的大图特供网站_交互设计教程
  18. linux raid 监控,如何使用CentOS 6监控Dell PERC H710 Raid控制器背后的硬盘状态?
  19. [渝粤教育] 长沙民政职业技术学院 高职公共英语(三) 参考 资料
  20. linux服务器开机管理,中标麒麟Linux服务器操作系统启动管理(29页)-原创力文档...

热门文章

  1. spark 常用函数介绍(python)
  2. ImportError: cannot import name HTTPSHandler
  3. java进行md5运算(Java类函数调用)
  4. 计算机组成要素六:编译器 语法分析器
  5. window SDK自定义安装路径选择
  6. ascii码01100001_ASCII编码和Unicode编码
  7. 前端程序员最爱用的8款代码编辑器,你用哪款?
  8. Fastreport.Net用户手册:报表对象
  9. 第十三章:Java_反射机制
  10. 【python】获取列表中最长连续数字