1>path转化器
之前介绍的str、int、path等若不够用的情况下,我们也可以自己定义一个转化器
可以直接就在first_pro项目文件下面新建一个converter.py文件,专门存放自定义的path转化器
urls.py改写如下,注意,自定义的转换器一定要用django的register_converter进行注册,注册的时候也要指定
别名,就是path中调用时的函数名称,如下
2>路由层总结
基于之前的章节,把路由层(path分发)一些基本的东西都学完了,稍作梳理如下
--->通过django 1的re_path,可以写正则匹配路径,让一大堆类型相同的path都简写成一个正则匹配的path
大大的减少了代码量如果要从path中取值,就在它周围加上括号(),取值之后,对应的处理函数就要写
参数来接收这个值。
--->有名分组:可以使用命名的正则表达式组来捕获URL 中的值并以关键字参数传递给视图,就是在正则匹配项
前面,加上?P<name>的方式为这个值取个别名,类似python的关键字参数,取名之后,传参就必须“指名道姓”了,
处理函数的参数就必须是这个别名,不能是别的,可以打乱位置,否则会报错。
--->路由分发:当urls.py的path越来越多,后期管理就尤为不便,于是引入了路由分发功能,简言之,就是在每个应用
下面增加自己的urls.py文件,用来存在本应用相关的path,项目urls.py就存放一些主页/一级菜单等等的path,其他的
通过include函数做分发,这样可以提升代码/path的层级关系,后期管理更方便。
--->反向解析:从一个登陆验证的功能,引入反向解析的概念,之前登陆页面表单提交,action部分是写死的path路径,
当我主urls.py的path变化之后,得找到这些引用的地方一个一个的去改,着实麻烦且易出错,反向解析就是先给主
urls.py的path定义个别名,其他地方通过特定的格式引用这个别名就行了,这样主urls.py的path不管怎么变,其他引用的
地方都不必再改变或操心这些事。因为你别名不变,那么,引用的时候就能指到这个(最新的)path。
--->名称空间,通过反向解析别名重名的问题,引入名称空间,类似于如果有两个不一样的app下面都取了“张三”代指
一个path,而这个别名是全局性的,反向解析时就会去找,找到一个便返回,就自始至终只能找到一个“张三”的问题,
名称空间相当于给每个“张三”再加个标识,比如这是“房间1的张三”,那是“房间2的张三”,也就是限定别名的作
用域,这样,反向解析就能找到对应的/正确的哪个“张三”。
--->Django 2的path,相比1版本的优化点,列举了两个,一是取值形式,之前是(),现在是尖括号<>。
二是取值的类型转换,之前取回来的值,一些看起是int的值,其实类型是str,需要再函数里面手动转换,
现在直接在path里面,增加转换器,实现一些字符的转换功能。
然后就是本章的,若是这些django的内置转换器不够用,就自己定义转换器,引用前需注册,取别名,再通过别名调用。