六: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 ...
随机推荐
- atxserver2-rethinkdb的一些基础操作
因为我只需要一些基础操作就好,所以在web端的 Data Explorer 操作,首先启动 rethinkdb.exe,然后登陆网页端, 下面是一些基础操作的语句, 一.创建表r.db(‘atxse ...
- AIX中文件系统管理
1.文件系统类型 AIX主要支持的文件系统有: JFS(Journaled File Systems) 日志型文件系统 JFS2(Enhanced Journaled File S ...
- 详解PHP文件下载的原理和实现
通常文件下载过程是十分简单的,建立一个链接指向到目标文件就可以了.例如下面的链接: XML/HTML代码 <a href=http://www.xxx.com/xxx.rar>点击下载文件 ...
- Ubuntu16.04下caffe CPU版的图片训练和测试
一 数据准备 二.转换为lmdb格式 1.首先,在examples下面创建一个myfile的文件夹,来用存放配置文件和脚本文件.然后编写一个脚本create_filelist.sh,用来生成train ...
- inoutfy与rsync进行实时同步
更新阿里epel源 安装镜像源 curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo --- 扩展 ...
- html中自定义上传文件的样式
<script> $(function(){ $("#avatsel1").click(function(){ $("input[type='file']&q ...
- 【NOIP2017提高组模拟12.24】B
题目 现在你有N个数,分别为A1,A2,-,AN,现在有M组询问需要你回答.每个询问将会给你一个L和R(L<=R),保证Max{Ai}-Min{Ai}<=R-L,你需要找出并输出最小的K( ...
- 【leetcode】1202. Smallest String With Swaps
题目如下: You are given a string s, and an array of pairs of indices in the string pairs where pairs[i] ...
- anaconda历史版本下载
anaconda历史版本安装: anaconda所有版本链接:https://repo.continuum.io/archive/ 清华大学开源软件镜像站:https://mirrors.tuna.t ...
- sql 查询 某字段是否重复
select count(*) from ( select * from 客户 )C GROUP BY 客户编码 select * from ( select count(*)num from ( s ...