flask框架自定义url转换器操作详解


Posted in Python onJanuary 25, 2020

本文实例讲述了flask框架自定义url转换器。分享给大家供大家参考,具体如下:

什么是url转换器

可以指定url的规制,对url做一定的限制。

自带的url转换器

可以参考我的上一篇博客: flask?url与重定向详解

自定义url转换器

首先我们提一个需求,根据需求来写代码,现在我们假设一个url需要满足电话号码的格式才能访问我们的函数视图,例如这样的url: 127.0.0.1:5000/user/<电话号码>/.

# 首先导入BaseConverter
from werkzeug.routing import BaseConverter
from flask import Flask
app = Flask(__name__)
# 然后我们写一个类,需要继承BaseConverter这个类
class TelphoneConverter(BaseConverter):
 # 然后将我们url的规则写到regex这个属性上,必须为regex,正则表达式
 # 以1开始,第二位数只能是3458中的一个,然后后面随便跟9个数字
 regex = '1[3458]\d{9}'
# 然后我们需要注册我们自定义的转换器
# 'tel': 为我们给这个转换器取的名字,我们使用的时候就会使用这个名字
# 'TelephoneConverter': 为'tel'这个转换器对应的类,也就是我们上面写的类,当我们使用'tel'时,就会去使用这个类中的regex属性
app.url_map.converters['tel'] = TelephoneConverter
# 然后使用我们的tel转换器
@app.route('/user/<tel:telephone>')
def tel_demo(telephone):
 return "你的电话号码是:%s" % telephone

然后我们就可以输入网址测试了,如果我们输入的规则不满足我们写的正则表达式的话,就会出现404页面。

在上面的tel转换器中,我们只是写了规则,我们还可以对url进行一些自定义的处理,然后再传给我们的视图函数.

这个时候就会使用到我们的to_python和to_url方法了

需求:当输入的url为127.0.0.1/a+b/这样的时候,我们想在视图函数中拿到的时候就直接是一个列表['a','b'],而不用我们每次都去自己转换。而当我们使用url_for闯入参数的时候,我们直接传入['a','b'],也能直接给我们变成a+b这种形式。

代码如下:

from flask import Flask
from flask import url_for
from werkzeug.routing import BaseConverter
class ListConverter(BaseConverter):
 # 重写to_python方法,value就是url传入的参数,也就是我们url中传入的参数会经过这个方法处理之后,
 # 然后再返回给我们的视图函数,也就是我们在视图函数中拿到的值是经过这个函数处理过后的值
 def to_python(self,value):
 return value.split('+')
 # 重写to_url方法,value就是我们在使用url_for的时候传入的参数,也就是说我们传入的参数会经过这个方法的处理,再变成url
 def to_url(self,value):
 return "+".join(value)
# 然后我们还是要注册我们的转换器
app.url_map.converters['list'] = ListConverter
# 然后编写一个视图来测试
@app.route('/index/')
def index():
 return url_for('board',boards=['a','b'])
@app.route('/<list:boards>/')
def demo(boards):
 print(boards)
 return 'boards is ' + str(boards)

然后启动项目,当我们访问127.0.0.1:5000/index/的时候,我们就能看到/a+b/,这个就是to_url函数起作用了。而当我们在浏览中输入127.0.01:5000/a+b/,就能看到了一个列表。这也就是我们的to_python起作用了。

总结:

  • 自定义url转换器需要继承自BaseConverter这个类
  • url的规则需要重写regex这个属性(写正则表达式)
  • to_python方法是在url中的参数传入视图函数之前,会对参数进行处理
  • to_url方法在使用url_for的时候,会对传入的参数进行处理,再转化为url
  • 最后,一定要将自定义的url转换器添加至app.url_map.converters中

希望本文所述对大家基于flask框架的Python程序设计有所帮助。

Python 相关文章推荐
Python语言实现机器学习的K-近邻算法
Jun 11 Python
在Linux系统上安装Python的Scrapy框架的教程
Jun 11 Python
linecache模块加载和缓存文件内容详解
Jan 11 Python
python3监控CentOS磁盘空间脚本
Jun 21 Python
对pandas通过索引提取dataframe的行方法详解
Feb 01 Python
Python HTML解析器BeautifulSoup用法实例详解【爬虫解析器】
Apr 05 Python
详解Python 函数如何重载?
Apr 23 Python
解决Django中多条件查询的问题
Jul 18 Python
Python及Pycharm安装方法图文教程
Aug 05 Python
Python3基于print打印带颜色字符串
Jul 06 Python
Pycharm添加虚拟解释器报错问题解决方案
Oct 13 Python
pandas中DataFrame数据合并连接(merge、join、concat)
May 30 Python
常用python爬虫库介绍与简要说明
Jan 25 #Python
flask框架url与重定向操作实例详解
Jan 25 #Python
flask框架蓝图和子域名配置详解
Jan 25 #Python
flask框架渲染Jinja模板与传入模板变量操作详解
Jan 25 #Python
如何在 Django 模板中输出 &quot;{{&quot;
Jan 24 #Python
在keras中获取某一层上的feature map实例
Jan 24 #Python
keras获得model中某一层的某一个Tensor的输出维度教程
Jan 24 #Python
You might like
实现dedecms全站URL静态化改造的代码
2007/03/29 PHP
windows下升级PHP到5.3.3的过程及注意事项
2010/10/12 PHP
php 启动报错如何解决
2014/01/17 PHP
php的GD库imagettftext函数解决中文乱码问题
2015/01/24 PHP
php获取远程文件的内容和大小
2015/11/03 PHP
thinkphp多层MVC用法分析
2015/12/30 PHP
在Win2003(64位)中配置IIS6+PHP5.2.17+MySQL5.5的运行环境
2016/04/04 PHP
Yii2 rbac权限控制之菜单menu实例教程
2016/04/28 PHP
php使用get_class_methods()函数获取分类的方法
2016/07/20 PHP
ThinkPHP使用getlist方法实现数据搜索功能示例
2017/05/08 PHP
基于jquery实现的表格分页实现代码
2011/06/21 Javascript
jquery自定义类似$.ajax()的方法实现代码
2013/08/13 Javascript
用JavaScript实现对话框的教程
2015/06/04 Javascript
JavaScript如何获取数组最大值和最小值
2015/11/18 Javascript
Bootstrap导航条可点击和鼠标悬停显示下拉菜单的实现代码
2016/06/23 Javascript
jQuery实现div横向拖拽排序的简单实例
2016/07/13 Javascript
p5.js入门教程之鼠标交互的示例
2018/03/16 Javascript
讲解vue-router之命名路由和命名视图
2018/05/28 Javascript
理理Vue细节(推荐)
2019/04/16 Javascript
element 中 el-menu 组件的无限极循环思路代码详解
2020/04/26 Javascript
design vue 表格开启列排序的操作
2020/10/28 Javascript
[01:03:38]2014 DOTA2国际邀请赛中国区预选赛5.21 CNB VS CIS
2014/05/22 DOTA
Python3基础之函数用法
2014/08/13 Python
python实现杨辉三角思路
2017/07/14 Python
Python企业编码生成系统之主程序模块设计详解
2019/07/26 Python
python使用rsa非对称加密过程解析
2019/12/28 Python
html5 sessionStorage会话存储_动力节点Java学院整理
2017/07/06 HTML / CSS
html5的canvas实现3d雪花飘舞效果
2013/12/27 HTML / CSS
传播学毕业生求职信
2013/10/11 职场文书
医学专业五年以上个人求职信
2013/12/03 职场文书
绩效工资分配方案
2014/01/18 职场文书
会计专业自我鉴定
2014/02/10 职场文书
出纳员岗位职责
2014/03/13 职场文书
高考励志标语
2014/06/05 职场文书
党校学习心得体会范文
2014/09/09 职场文书
终止或解除劳动合同及劳动关系的证明书
2014/10/06 职场文书