自定义 url 转换器五个步骤:

  1. 定义一个类。
  2. 在类中定义一个属性  regex  ,这个属性是用来保存 url 转换器规则的正则表达式。
  3. 实现  to_python(self,value)  方法,将 url 中的值转换一下,然后传给视图函数的。
  4. 实现  to_url(self,value)  方法,做 url 反转的时候,将传进来的参数转换后拼接成一个正确的url。
  5. 将定义好的转换器,注册到django中。
  6. 例子:获取列表分类(/article/list/python+django+flask)
     #在应用下新建converter.py文件
    from django.urls import converters,register_converter class CategoryConverter():
    regex = r'\w+|(\w+\+\w+)+' def to_python(self,value):
    #python+django+flask
    #['python','django','flask']
    result = value.split("+")
    return result def to_url(self,value):
    #value:['python','django','flask']
    #python+django+flask
    if isinstance(value,list):
    reslut = '+'.join(value)
    return reslut
    else:
    raise RuntimeError('转换url的时候,分类参数必须为列表') register_converter(CategoryConverter,'cate')
     #应用的urls.py
    from django.urls import path,re_path
    from . import views urlpatterns = [
    path('',views.article),
    #\w: 0-9 a-z A-Z
    #re_path(r'list/(?P<categories>\w+|(\w+\ +\w+)+)/',views.article_list)
    path('list/<cate:categories>/',views.article_list,name='list'),
    path('detail/<int:article_id>/',views.article_detail,name='detail')
    ]
     #应用的views.py
    from django.http import HttpResponse
    from django.shortcuts import reverse,redirect def article(request):
    return HttpResponse('文章首页') #定义文章列表函数,参数:分类
    def article_list(request,categories):
    text = '您填写的分类是:%s' % categories
    return HttpResponse(text) def article_detail(request,article_id):
    reverse('detail',kwargs={'article_id':article_id})
    return HttpResponse('文章详情')
     #应用的__init__.py文件
    from . import converters
     #项目的urls.py文件
    from django.urls import path,include urlpatterns = [
    path('',include('article.urls')),
    path('article/',include('article.urls'))
    ]

  7. 一个匹配四个数字年份的 url 转换器。示例代码如下:

     # 定义一个类
    class FourDigitYearConverter:
    regex = '[0-9]{4}' def to_python(self, value):
    return int(value) def to_url(self, value):
    return '%04d' % value # 注册到django中
    from django.urls import register_converter
    register_converter(converters.FourDigitYearConverter, 'yyyy')
    urlpatterns = [
    path('articles/2003/', views.special_case_2003),
    # 使用注册的转换器
    path('articles/<yyyy:year>/', views.year_archive),
    ...
    ]


自制URL转换器的更多相关文章

  1. python_flask 基础巩固(自定义URL转换器)

    自定义URL转换器(在BaseConverter类外定义)from werkzeug.routing import BaseConverter定义类继承BaseConverter 实现类app.url ...

  2. flask第十一篇——自定义url转换器

    首先和大家说一下flask的组成,flask其实是werkzeug(路由和http处理)+SQLAlchemy(数据库)+Jinja2(模板)组成的,今天我们要看到的东西就是`werkzeug`里面的 ...

  3. 014:Django内置的URL转换器

    Django内置的URL转换器: 上节中我们说了URL中传参的情况,传递参数是通过 <> 尖括号来进行指定的.并且在传递参数的时候,可以指定这个参数的数据类型,比如文章的 id 都是 in ...

  4. 六:flask-自定义URL转换器

    flask进行url参数匹配的时候,是继承的werkzeug.routing.BaseConverter库进行重写的 导入看源码 里面有所有的URL参数数据类型的判断 也就是说,可以继承过后实现自己的 ...

  5. django 自定义url转换器

    django内置的url转换器,包括有int.str.uuid等等.但是有时候他们不能满足我们的需求,因此就需要使用自定义url转换器.自定义url转换器的五步:1.定义一个类,直接继承自object ...

  6. flaks-自定义url转换器

    flaks-自定义url转换器 from flask import Flask, url_for from werkzeug.routing import BaseConverter app = Fl ...

  7. flask第十二篇——自定义url转换器【2】

    继续昨天的话题,今天我们来写一个手机号的转换器,方便大家理解 我们在`BaseConverter`源码里看到好多这种正则表达式: 正则表达式的目的就是规范匹配的规则,现在我们写一个简单的匹配手机号的正 ...

  8. Flask入门学习——自定义一个url转换器

          我们知道,flask的url规则是可以添加变量部分的,这个参数变量是写在尖括号里的,比如:/item/<id>/,如果需要指出参数的类型要符合<converter:vai ...

  9. python3 Flask -day4 自定义url转换器

    url传参可以限定参数的数据类型,例如:限定user_id数据类型为int @app.route('/user/<int:user_id>') def my_list(user_id): ...

随机推荐

  1. 【C++类与对象】实验四(二)

    实现画图类 #ifndef GRAPH_H #define GRAPH_H // 类Graph的声明 class Graph { public: Graph(char ch, int n); // 带 ...

  2. Linux 下安装mysql 5.7

    Linux 下安装mysql 5.7 本人首次安装时按照菜鸟教程的步骤一步一步来的,结果意外的是 装成5.6了,而且各种无厘头的问题,例如无法启动... 本文参照 大佬:‘这个名字想了很久~’ 的&l ...

  3. LCA(Lowest Common Ancesor)

    LCA(Lowest Common Ancesor) 1.基于二分搜索算法 预处理father[v][k]表示v的2的k次方层祖先,时间复杂度是O(nlogn),每次查询的时间复杂度是O(logn), ...

  4. stm32专属于菜鸟的学习方法

    1.首先我们先看看与STM32相关的文档 我们假定大家已经对STM32的书籍或者文档有一定的理解.如不理解,请立即阅读STM32的文档,以获取最基本的知识点. 如果你手上拥有ST官方主推的STM32神 ...

  5. xss脚本绕过限制的方法

    第一关:第一关比较简单,直接写入标签就可以,这里不多说了,payload如下: http://sqler.win/xss/level1.php?name=test%3Csvg/onload=alert ...

  6. 如何使用Windows防火墙禁止软件联网

    很多软件需要联网,当我们为了“某些目的”,不想让软件联网的时候,我们有没有办法做到呢?答案是肯定的,那就是使用Windows系统自带的防火墙来屏蔽软件的联网,禁止软件出站请求,这样就可以了,下面介绍具 ...

  7. Selenium IDE

    Selenium IDE : Selenium IDE作为Firefox浏览器的一款插件,依附于firefox浏览器,打开它的录制功能,它会忠实的记录,你对firefox的操作,并可以回放它所记录的你 ...

  8. 接口测试工具-Jmeter使用笔记(九:跨线程组传递变量)

    使用场景: 请求API需要授权令牌,但是授权令牌只需要获取一次,即可调用服务器上其他业务接口. 所以我想要把授权操作放在单独的一个线程,业务流放在其他线程. 这就需要我把从授权线程获取的令牌传入业务流 ...

  9. day014 模块

    # 1.用于多种语言交互 编程语言通用数据 # 内置的 不需要安装 直接导入使用 import json # 导入一个json模块 # dumps loads# dump load 有持久化的功能 # ...

  10. pat 1051Pop Sequence

    模拟栈的过程,一开始我是用的cin来判断每行的每一个数字,然后判断回车结束.有一个点会超时,答案用数组先记录序列的方法非常好.有一个注意点就是访问s.top()的时候先要保证s.size()>0 ...