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自动翻译实现方法
May 28 Python
Python实现读取txt文件并画三维图简单代码示例
Dec 09 Python
Win10系统下安装labelme及json文件批量转化方法
Jul 30 Python
Python3 requests文件下载 期间显示文件信息和下载进度代码实例
Aug 16 Python
Python使用scipy模块实现一维卷积运算示例
Sep 05 Python
Django连接数据库并实现读写分离过程解析
Nov 13 Python
Python实现把类当做字典来访问
Dec 16 Python
keras得到每层的系数方式
Jun 15 Python
Python通用唯一标识符uuid模块使用案例
Sep 10 Python
python合并多个excel文件的示例
Sep 23 Python
Pytest中skip skipif跳过用例详解
Jun 30 Python
Python用any()函数检查字符串中的字母以及如何使用all()函数
Apr 14 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
JavaScript与HTML结合的基本使用方法整理
2015/10/12 PHP
php5.3/5.4/5.5/5.6/7常见新增特性汇总整理
2020/02/27 PHP
PHP设计模式(三)建造者模式Builder实例详解【创建型】
2020/05/02 PHP
JS文本获得焦点清除文本文字的示例代码
2014/01/13 Javascript
Javascript实现的常用算法(如冒泡、快速、鸽巢、奇偶等)
2014/04/29 Javascript
Javascript中的几种URL编码方法比较
2015/01/23 Javascript
JavaScript判断字符长度、数字、Email、电话等常用判断函数分享
2015/04/01 Javascript
js插件设置innerHTML时在IE8下提示“未知运行时错误”解决方法
2015/04/25 Javascript
js实现时间显示几天前、几小时前或者几分钟前的方法集锦
2015/05/29 Javascript
自己动手制作基于jQuery的Web页面加载进度条插件
2016/06/03 Javascript
Bootstrap 网站实例之单页营销网站
2016/10/20 Javascript
vue组件实例解析
2017/01/10 Javascript
浅谈jQuery的bind和unbind事件(绑定和解绑事件)
2017/03/02 Javascript
微信小程序获取循环元素id以及wx.login登录操作
2017/08/17 Javascript
JavaScript编写开发动态时钟
2020/07/29 Javascript
vue+echarts实现中国地图流动效果(步骤详解)
2021/01/27 Vue.js
python实现网页链接提取的方法分享
2014/02/25 Python
Python3.6 Schedule模块定时任务(实例讲解)
2017/11/09 Python
Python读取英文文件并记录每个单词出现次数后降序输出示例
2018/06/28 Python
pygame游戏之旅 添加碰撞效果的方法
2018/11/20 Python
使用pandas的box_plot去除异常值
2019/12/10 Python
python将dict中的unicode打印成中文实例
2020/05/11 Python
virtualenv介绍及简明教程
2020/06/23 Python
CSS3制作酷炫的三维相册效果
2016/07/01 HTML / CSS
css3利用transform变形结合事件完成扇形导航
2020/10/26 HTML / CSS
深入解析HTML5 Canvas控制图形矩阵变换的方法
2016/03/24 HTML / CSS
Monnier Freres中文官网:法国领先的奢侈品配饰在线零售商
2017/11/01 全球购物
岗位廉洁从业承诺书
2014/03/28 职场文书
素质教育标语
2014/06/27 职场文书
干部作风建设心得体会
2014/10/22 职场文书
学生保证书
2015/01/16 职场文书
英文自荐信范文
2015/03/25 职场文书
2015年民主评议党员工作总结
2015/05/19 职场文书
小学二年级语文教学反思
2016/03/03 职场文书
vue实现水波涟漪效果的点击反馈指令
2021/05/31 Vue.js
室外天线与收音机天线杆接合方法
2022/04/05 无线电