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绘图库Matplotlib的安装
Jul 03 Python
解决Python 遍历字典时删除元素报异常的问题
Sep 11 Python
Python 通过pip安装Django详细介绍
Apr 28 Python
Python之str操作方法(详解)
Jun 19 Python
python 实现将txt文件多行合并为一行并将中间的空格去掉方法
Dec 20 Python
Python二叉搜索树与双向链表转换算法示例
Mar 02 Python
python使用KNN算法识别手写数字
Apr 25 Python
python交易记录链的实现过程详解
Jul 03 Python
python函数定义和调用过程详解
Feb 09 Python
python模块内置属性概念及实例
Feb 18 Python
Python数据分析之pandas函数详解
Apr 21 Python
OpenCV3.3+Python3.6实现图片高斯模糊
May 18 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
php操作(删除,提取,增加)zip文件方法详解
2015/03/12 PHP
php 常用的系统函数
2017/02/07 PHP
解决jquery的datepicker的本地化以及Today问题
2012/05/23 Javascript
js实现页面跳转重定向的几种方式
2014/05/29 Javascript
教你用jquery实现iframe自适应高度
2014/06/11 Javascript
PhotoShop给图片自动添加边框及EXIF信息的JS脚本
2015/02/15 Javascript
jquery siblings获取同辈元素用法实例分析
2016/07/25 Javascript
js实现密码强度检验
2017/01/15 Javascript
推荐三款日期选择插件(My97DatePicker、jquery.datepicker、Mobiscroll)
2017/04/21 jQuery
详解webpack 配合babel 将es6转成es5 超简单实例
2017/05/02 Javascript
Nodejs中Express 常用中间件 body-parser 实现解析
2017/05/22 NodeJs
vuex中使用对象展开运算符的示例
2017/09/25 Javascript
layui复选框的全选与取消实现方法
2019/09/02 Javascript
vue项目中播放rtmp视频文件流的方法
2020/09/17 Javascript
vue 页面跳转的实现方式
2021/01/12 Vue.js
基于python中pygame模块的Linux下安装过程(详解)
2017/11/09 Python
PyTorch快速搭建神经网络及其保存提取方法详解
2018/04/28 Python
对python程序内存泄漏调试的记录
2018/06/11 Python
Python数据结构与算法(几种排序)小结
2019/06/22 Python
Python closure闭包解释及其注意点详解
2019/08/28 Python
python中单下划线(_)和双下划线(__)的特殊用法
2019/08/29 Python
Python 3.8正式发布重要新功能一览
2019/10/17 Python
Python爬虫实现HTTP网络请求多种实现方式
2020/06/19 Python
css3+jq创作含苞待放的荷花
2014/02/20 HTML / CSS
纯CSS和jQuery实现的在页面顶部显示的进度条效果2例(仿手机浏览器进度条效果)
2014/04/16 HTML / CSS
Lampegiganten丹麦:欧洲领先的照明网上商店
2018/04/25 全球购物
如果NULL和0作为空指针常数是等价的,那我到底该用哪一个
2014/09/16 面试题
在校生党员自我评价
2013/09/25 职场文书
职业生涯规划怎么写
2013/12/29 职场文书
给女儿的表扬信
2014/01/18 职场文书
小学岗位竞聘方案
2014/01/22 职场文书
村党支部对照检查材料思想汇报
2014/09/28 职场文书
房屋授权无偿使用证明
2014/11/29 职场文书
员工规章制度范本
2015/08/07 职场文书
MySQL数据库事务的四大特性
2022/04/20 MySQL
vue 自定义的组件绑定点击事件
2022/04/21 Vue.js