自制URL转换器
自定义 url 转换器五个步骤:
- 定义一个类。
- 在类中定义一个属性 regex ,这个属性是用来保存 url 转换器规则的正则表达式。
- 实现 to_python(self,value) 方法,将 url 中的值转换一下,然后传给视图函数的。
- 实现 to_url(self,value) 方法,做 url 反转的时候,将传进来的参数转换后拼接成一个正确的url。
- 将定义好的转换器,注册到django中。
- 例子:获取列表分类(/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'))
]
一个匹配四个数字年份的 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转换器的更多相关文章
- python_flask 基础巩固(自定义URL转换器)
自定义URL转换器(在BaseConverter类外定义)from werkzeug.routing import BaseConverter定义类继承BaseConverter 实现类app.url ...
- flask第十一篇——自定义url转换器
首先和大家说一下flask的组成,flask其实是werkzeug(路由和http处理)+SQLAlchemy(数据库)+Jinja2(模板)组成的,今天我们要看到的东西就是`werkzeug`里面的 ...
- 014:Django内置的URL转换器
Django内置的URL转换器: 上节中我们说了URL中传参的情况,传递参数是通过 <> 尖括号来进行指定的.并且在传递参数的时候,可以指定这个参数的数据类型,比如文章的 id 都是 in ...
- 六:flask-自定义URL转换器
flask进行url参数匹配的时候,是继承的werkzeug.routing.BaseConverter库进行重写的 导入看源码 里面有所有的URL参数数据类型的判断 也就是说,可以继承过后实现自己的 ...
- django 自定义url转换器
django内置的url转换器,包括有int.str.uuid等等.但是有时候他们不能满足我们的需求,因此就需要使用自定义url转换器.自定义url转换器的五步:1.定义一个类,直接继承自object ...
- flaks-自定义url转换器
flaks-自定义url转换器 from flask import Flask, url_for from werkzeug.routing import BaseConverter app = Fl ...
- flask第十二篇——自定义url转换器【2】
继续昨天的话题,今天我们来写一个手机号的转换器,方便大家理解 我们在`BaseConverter`源码里看到好多这种正则表达式: 正则表达式的目的就是规范匹配的规则,现在我们写一个简单的匹配手机号的正 ...
- Flask入门学习——自定义一个url转换器
我们知道,flask的url规则是可以添加变量部分的,这个参数变量是写在尖括号里的,比如:/item/<id>/,如果需要指出参数的类型要符合<converter:vai ...
- python3 Flask -day4 自定义url转换器
url传参可以限定参数的数据类型,例如:限定user_id数据类型为int @app.route('/user/<int:user_id>') def my_list(user_id): ...
随机推荐
- Javascript实现MD5加密
/* * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message * Digest Algorithm, as d ...
- HTML、CSS知识点,面试开发都会需要--No.3 盒子模型
No.3 盒子模型 1.盒子模型属性 (1)包含的CSS属性:width.height.padding.border.margin. 1.盒子模型属性 (1)包含的CSS属性: width.heigh ...
- POJ 1426 - Find The Multiple - [DP][BFS]
题目链接:http://poj.org/problem?id=1426 Given a positive integer n, write a program to find out a nonzer ...
- office 2016密钥
Office 2016 Pro Plus Retail 版激活密钥:[Key]:3XJTG-YNBMY-TBH9M-CWB2Y-YWRHH[Key]:6TCQ3-NBBJ2-RTJCM-HFRKV-G ...
- 洛谷P4396 作业 [AHOI2013] 莫队
正解:莫队 解题报告: 传送门! 天呐太久没做莫队了连板子都认不出来了,,,所以复健下做下莫队的题目QAQ 就很板子鸭,和莫队板子比好像只有一个离散化,,,?就不讲了QAQ 等下直接放代码QAQ ov ...
- Cocoa 框架 For iOS(一) 框架的介绍,Objectivie-C运行时能力的解析等 (转载)
http://blog.csdn.net/totogo2010/article/details/8081253 Cocoa框架是iOS应用程序的基础,了解Cocoa框架,对开发iOS应用有很大的帮助. ...
- Yii2 mongoDb的配置及使用
yii2 的配置都是在启动时加载的,所以mongo的配置也同样在component里面配置. 具体实现(无用户和密码): [ 'mongo1' => [ 'class' => '\yii\ ...
- 【JVM】-NO.112.JVM.2 -【JDK11 HashMap详解-2-tab[i = (n - 1) & hash])剖析】
Style:Mac Series:Java Since:2018-09-10 End:2018-09-10 Total Hours:1 Degree Of Diffculty:5 Degree Of ...
- Python:向MySQL数据库插文件
关于python 插mysql数据库的. 提醒自己注意下conn.commit()#对于对数据库中的结果发生变化的操作,需要用conn.commit()进行提交 忘了写提交的代码,刚才看了半天,我说怎 ...
- 前端JS常见面试题(代码自撸)
题目一示例: 适用于子数组等长度及不等长度. let arr = [ [1,2,3], [5,6,7,8], [9,10,11,12,13] ] function arrayDiagonal(arr) ...