自定义 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)
    1. #在应用下新建converter.py文件
    2. from django.urls import converters,register_converter
    3.  
    4. class CategoryConverter():
    5. regex = r'\w+|(\w+\+\w+)+'
    6.  
    7. def to_python(self,value):
    8. #python+django+flask
    9. #['python','django','flask']
    10. result = value.split("+")
    11. return result
    12.  
    13. def to_url(self,value):
    14. #value:['python','django','flask']
    15. #python+django+flask
    16. if isinstance(value,list):
    17. reslut = '+'.join(value)
    18. return reslut
    19. else:
    20. raise RuntimeError('转换url的时候,分类参数必须为列表')
    21.  
    22. register_converter(CategoryConverter,'cate')
    1. #应用的urls.py
    2. from django.urls import path,re_path
    3. from . import views
    4.  
    5. urlpatterns = [
    6. path('',views.article),
    7. #\w: 0-9 a-z A-Z
    8. #re_path(r'list/(?P<categories>\w+|(\w+\ +\w+)+)/',views.article_list)
    9. path('list/<cate:categories>/',views.article_list,name='list'),
    10. path('detail/<int:article_id>/',views.article_detail,name='detail')
    11. ]
    1. #应用的views.py
    2. from django.http import HttpResponse
    3. from django.shortcuts import reverse,redirect
    4.  
    5. def article(request):
    6. return HttpResponse('文章首页')
    7.  
    8. #定义文章列表函数,参数:分类
    9. def article_list(request,categories):
    10. text = '您填写的分类是:%s' % categories
    11. return HttpResponse(text)
    12.  
    13. def article_detail(request,article_id):
    14. reverse('detail',kwargs={'article_id':article_id})
    15. return HttpResponse('文章详情')
    1. #应用的__init__.py文件
    2. from . import converters
    1. #项目的urls.py文件
    2. from django.urls import path,include
    3.  
    4. urlpatterns = [
    5. path('',include('article.urls')),
    6. path('article/',include('article.urls'))
    7. ]

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

    1. # 定义一个类
    2. class FourDigitYearConverter:
    3. regex = '[0-9]{4}'
    4.  
    5. def to_python(self, value):
    6. return int(value)
    7.  
    8. def to_url(self, value):
    9. return '%04d' % value
    10.  
    11. # 注册到django中
    12. from django.urls import register_converter
    13. register_converter(converters.FourDigitYearConverter, 'yyyy')
    14. urlpatterns = [
    15. path('articles/2003/', views.special_case_2003),
    16. # 使用注册的转换器
    17. path('articles/<yyyy:year>/', views.year_archive),
    18. ...
    19. ]


自制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. javascript的数组之find()

    find()方法返回数组中第一个满足回调函数测试的第一个元素的值.否则返回undefined const arr1 = [1, 2, 3, 4, 6, 9]; let found = arr1.fin ...

  2. linux--- python3环境部署篇

    环境部署 我们在pycharm上都是自己设置的python3解释器的环境变量,使得代码能够正常执行!可是怎么能让我们的python代码在LINUX上跑起来呢? linux是内置python,可是内置的 ...

  3. redis,缓存雪崩,粗粒度锁,缓存一致性

    1, redis单线程为什么快 io多路复用技术 单线程避免多线程的频繁切换问题 memcache缺点 kv形式数据 没有持久化mongodb 海量数据的访问效率 mr的计算模型文档就是类似json的 ...

  4. spark streaming集成flume

    1. 安装flume flume安装,解压后修改flume_env.sh配置文件,指定java_home即可. cp hdfs jar包到flume lib目录下(否则无法抽取数据到hdfs上): $ ...

  5. 洛谷P3516 PRZ-Shift [POI2011] 构造

    正解:构造 解题报告: 传送门! umm这题就是很思维的?就是想到了就A了想不到就做不出来,然而我也只能是做到理解不知道怎么想出来,,,感觉构造题什么的就很真诚,一点套路也没有,所以像我这种没有脑子只 ...

  6. POSTGRESQL中ERROR: recursive query "t" column 2 has type character varying(150) in non-recursive term but type character varying overall

    最近在做项目的时候有个需求是需要查到当前登录的用户下辖所有区域的数据,并将查询出来的部门信息以如下格式展示 最高人民法院>江苏省高级人民法院>南通市中级人民法院最高人民法院>江苏省高 ...

  7. 海思编解码芯片添加64M nor flash

    uboot和内核都必须修改. struct spi_info hisfc350_spi_info_table[] : 在结构体里面添加自己的flash节点,我这里用的是MX66LS51235E { & ...

  8. swagger:API在线文档自动生成框架

    传统的API从开发测试开始我们经常借用类似Postman.fiddle等等去做接口测试等等工具:Swagger 为API的在线测试.在线文档提供了一个新的简便的解决方案: NET 使用Swagger ...

  9. IdentityServer4授权和认证对接数据库

    接着上一篇讲:https://www.cnblogs.com/nsky/p/10352678.html 我们之前都是用in-men的方式把数据添加到内存了,目的是为了测试方便, 现在我们把所有配置都添 ...

  10. 与图论的邂逅01:树的直径&基环树&单调队列

    树的直径 定义:树中最远的两个节点之间的距离被称为树的直径.  怎么求呢?有两种官方的算法(不要问官方指谁我也不晓得): 1.两次搜索.首先任选一个点,从它开始搜索,找到离它最远的节点x.然后从x开始 ...