django第四天
路由别名
1.路由别名:
给路由路径命名一个名字
url(r'^login/$',views.login,name = 'login')
2.为什么要用路由别名
①当路由路径过长时,写起来会比较复杂,可以使用简短的别名,减少代码量
②当路由路径需要修改时,如果都是用路由路径的话,则扩展性较差,而使用别名来反向解析路由路径的话,只需要修改路由路径就ok了,扩展性高
3.如何用路由别名
在模板中.html文件
href = {% url '路由别名' 参数1,参数2...参数n%}
在重定向函数中
def login(request):
url = reverse("路由别名")
return redirect(url)
名称空间
名称空间:当项目的应用较多时,别名可能存在相同的可能
此时可以定义名称空间,以保证查找的唯一性
如何用名称空间
主路由:
url(r'^app01/',include('app01.urls',namespace='app01'))
子路由:
urlpatterns = [
url(r'^test/',views.test,name ="test")
]
模板:
{% url 'app01:test' %}
视图函数:
url = reverse('app01:test')
2.x新特性
from django.urls import path,re_path
1. 2.x re_path的使用方式同1.x版本url
2. path写的是绝对字符串,请求地址必须与路由地址完全匹配
3. path拥有5个转换器:
str:匹配除路径分隔符/外的字符串
int:匹配自然数
slug:匹配字母,数字,横杠及下划线组成的字符串
uuid:匹配uuid形式的数据
path:匹配任何字符串,包括路径分隔符/
自定义转换器
1.在应用文件夹下创建converter.py文件
2.在converter.py文件中创建自定义类
3.在类中定义regex 正则,
to_python方法
to_url方法
对于一些复杂或者复用的需要,可以定义自己的转化器。转化器是一个类或接口,它的要求有三点:
regex 类属性,字符串类型
to_python(self, value) 方法,value是由类属性 regex 所匹配到的字符串,返回具体的Python变量值,以供Django传递到对应的视图函数中。
to_url(self, value) 方法,和 to_python 相反,value是一个具体的Python变量值,返回其字符串,通常用于url反向引用。
class CVT185Phone:
regex = '185\d{8}'
def to_python(self, value):
return int(value)
def to_url(self, value):
return '%11d' % value
4.在主路由下导入,生成转换器
from django.urls import register_converter
from app.converter import CVT185phone
register_converter(CVT185phone,'phone185')
path('page/<phone185:msg>/',views.page,name="pages")