zoukankan      html  css  js  c++  java
  • django第四天(路由别名,django2.x新特性和自定义转换器)

    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 = '185d{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")
    
  • 相关阅读:
    【转】C#操作Word的超详细总结
    【转】C#操作word定位光标
    详解Amazon S3上传/下载数据
    VS2010程序崩溃- APPCRASH
    环境搭建
    centos搭建svn服务器
    SpringMVC必备知识点汇总
    SpringSecurity 配置
    数据库汇总
    java.io.IOException 断开的管道 解决方法 ClientAbortException: java.io.IOException: Broken pipe
  • 原文地址:https://www.cnblogs.com/robert-zhou/p/10478850.html
Copyright © 2011-2022 走看看