六:flask-自定义URL转换器
flask进行url参数匹配的时候,是继承的werkzeug.routing.BaseConverter库进行重写的
导入看源码

里面有所有的URL参数数据类型的判断






也就是说,可以继承过后实现自己的需求,即自定义url转换器比如:
url中,接收一个参数,限制此参数必须满足手机号格式



from flask import Flask
from werkzeug.routing import BaseConverter app = Flask(__name__) class PhoneConveter(BaseConverter):
""" 校验手机号 """
# BaseConverter下是使用regex来指定规则
regex = r'1[85734]\d{9}' # 第一位为1,第二位为85734之一,\d为数字,{9}指9位 app.url_map.converters['phone'] = PhoneConveter # 把自定义的规则加到url匹配规则中 # 接收一个参数,限制此参数必须满足手机号格式
@app.route('/phone/<phone:phone_num>/')
def phone(phone_num):
return f'接收到的手机号码为:{phone_num}'
to_python()方法,此方法的返回值,会自动传给使用到当前url转换规则的视图函数
如:在接口后面加参数a+b,则返回a的资源和b的资源
正常情况下应该是把接收到的参数根据 “+” 号进行切片,然后分别获取对应数据再返回,但是这个方法需要每个视图函数里面都要进行一次切片,如果这样的url参数非常多的话,就很麻烦


如果使用自定义url转换器的话,可以直接接收到就参数就转换成list传给视图函数处理,在BaseConverter下有个 to_python()方法,此方法的返回值,会自动传给使用到当前url转换规则的视图函数

class ListConveter(BaseConverter):
def to_python(self, value):
return value.split('+') app.url_map.converters['list'] = ListConveter # 把自定义的规则加到url匹配规则中 # 在接口后面加参数a+b,则返回a的资源和b的资源
@app.route('/posts/<list:boards>/')
def posts_(boards):
return f'资源a:{boards[0]}, 资源b:{boards[1]}'
to_url()方法,正好和to_python()方法相反,是在url_for()构建url的时候,将参数处理后再组成url
如,在构建url的时候,传入一个list,构建后的url为:url/list[0]+list[1]



class ListConveter(BaseConverter):
def to_python(self, value):
return value.split('+') def to_url(self, value):
print(f'value: {value}')
return '+'.join(value) app.url_map.converters['list'] = ListConveter # 把自定义的规则加到url匹配规则中 @app.route('/')
def hello_world():
a = url_for('posts_', boards=['a', 'b'])
print(f'a: {a}')
return a # 在接口后面加参数a+b,则返回a的资源和b的资源
@app.route('/posts/<list:boards>/')
def posts_(boards):
return f'资源a:{boards[0]}, 资源b:{boards[1]}'
六:flask-自定义URL转换器的更多相关文章
- flask 自定义url转换器
from werkzeug.routing import BaseConverter app = Flask(__name__) class TeleConveter(BaseConverter): ...
- flask第十一篇——自定义url转换器
首先和大家说一下flask的组成,flask其实是werkzeug(路由和http处理)+SQLAlchemy(数据库)+Jinja2(模板)组成的,今天我们要看到的东西就是`werkzeug`里面的 ...
- python_flask 基础巩固(自定义URL转换器)
自定义URL转换器(在BaseConverter类外定义)from werkzeug.routing import BaseConverter定义类继承BaseConverter 实现类app.url ...
- django 自定义url转换器
django内置的url转换器,包括有int.str.uuid等等.但是有时候他们不能满足我们的需求,因此就需要使用自定义url转换器.自定义url转换器的五步:1.定义一个类,直接继承自object ...
- python3 Flask -day4 自定义url转换器
url传参可以限定参数的数据类型,例如:限定user_id数据类型为int @app.route('/user/<int:user_id>') def my_list(user_id): ...
- flask第十二篇——自定义url转换器【2】
继续昨天的话题,今天我们来写一个手机号的转换器,方便大家理解 我们在`BaseConverter`源码里看到好多这种正则表达式: 正则表达式的目的就是规范匹配的规则,现在我们写一个简单的匹配手机号的正 ...
- 4、Flask实战第4天:自定义url转换器
url传参可以限定参数的数据类型,例如:限定user_id数据类型为int @app.route('/user/<int:user_id>') def my_list(user_id): ...
- 自制URL转换器
自定义 url 转换器五个步骤: 定义一个类. 在类中定义一个属性 regex ,这个属性是用来保存 url 转换器规则的正则表达式. 实现 to_python(self,value) 方法, ...
- flask动态url规则
动态URL规则 URL规则可以添加变量部分,也就是件更符合同规则的URL抽象成一个URL模式. @app.route('/item/<id>') def item(id): return ...
随机推荐
- 学习-Pytest(三)setup/teardown
1. 用例运行级别 模块级(setup_module/teardown_module)开始于模块始末,全局的 函数级(setup_function/teardown_function)只对函数用例生效 ...
- 最简单的Android项目(NDK命令行编译)
Android的NDK编程需要下载NDK编译环境,可以从官网下载window64位版,然后解压到任意目录即可. NDK的实现其实是利用里Java的jni方法,所以前期的步骤可以参考jni的实现方法,只 ...
- [工具] BurpSuite--快速生成CSRF POC
我们使用工具分析出存在csrf漏洞时,可以快速生成这个请求的poc,下面我们来看看怎么快速生成 0x00 上图是通过proxy,点击action,选择上图的选项即可生成这个请求的CSRF Poc了 当 ...
- Kong组件构成及使用
Service: Service 顾名思义,就是我们自己定义的上游服务,通过Kong匹配到相应的请求要转发的地方 Service 可以与下面的Route进行关联,一个Service可以有很多Route ...
- mybatis javabean字段与数据库字段的映射
结论:未作映射的字段没有值,但是数据库中实际是有值的,说明如果带下划线的字段未作映射,返回值是不会有值的,只有映射了的字段以及不带下划线的字段(默认映射)才有返回值 1.bean属性 public c ...
- dijkstra算法之优先队列优化
github地址:https://github.com/muzhailong/dijkstra-PriorityQueue 1.题目 分析与解题思路 dijkstra算法是典型的用来解决单源最短路径的 ...
- Ubuntu中linux虚拟机全屏
登录客户机操作系统.在虚拟机中装载CD驱动器启动终端,使用tar解压缩安装程序,然后执行vmware-insall.pl安装VMware Tools. 1.进入文件界面,找到左侧“设备”右击“安装VM ...
- HDU-4289-Control(最大流最小割,拆点)
链接: https://vjudge.net/problem/HDU-4289 题意: You, the head of Department of Security, recently receiv ...
- Maven:mirror和repository
1 Repository(仓库) 1.1 Maven仓库主要有2种: remote repository:相当于公共的仓库,大家都能访问到,一般可以用URL的形式访问 local repository ...
- 数据库基本概念及Oracle基本语句
一.数据库分类 通常是按照数据模型的特点将传统数据库系统分成网状数据库.层次数据库和关系数据库三种. 1.网状数据库 顾名思义,网状数据库采用的是以记录类型为结点的网状数据模型,是一种导航式(Navi ...