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转换器的更多相关文章

  1. flask 自定义url转换器

    from werkzeug.routing import BaseConverter app = Flask(__name__) class TeleConveter(BaseConverter): ...

  2. flask第十一篇——自定义url转换器

    首先和大家说一下flask的组成,flask其实是werkzeug(路由和http处理)+SQLAlchemy(数据库)+Jinja2(模板)组成的,今天我们要看到的东西就是`werkzeug`里面的 ...

  3. python_flask 基础巩固(自定义URL转换器)

    自定义URL转换器(在BaseConverter类外定义)from werkzeug.routing import BaseConverter定义类继承BaseConverter 实现类app.url ...

  4. django 自定义url转换器

    django内置的url转换器,包括有int.str.uuid等等.但是有时候他们不能满足我们的需求,因此就需要使用自定义url转换器.自定义url转换器的五步:1.定义一个类,直接继承自object ...

  5. python3 Flask -day4 自定义url转换器

    url传参可以限定参数的数据类型,例如:限定user_id数据类型为int @app.route('/user/<int:user_id>') def my_list(user_id): ...

  6. flask第十二篇——自定义url转换器【2】

    继续昨天的话题,今天我们来写一个手机号的转换器,方便大家理解 我们在`BaseConverter`源码里看到好多这种正则表达式: 正则表达式的目的就是规范匹配的规则,现在我们写一个简单的匹配手机号的正 ...

  7. 4、Flask实战第4天:自定义url转换器

    url传参可以限定参数的数据类型,例如:限定user_id数据类型为int @app.route('/user/<int:user_id>') def my_list(user_id): ...

  8. 自制URL转换器

    自定义 url 转换器五个步骤: 定义一个类. 在类中定义一个属性  regex  ,这个属性是用来保存 url 转换器规则的正则表达式. 实现  to_python(self,value)  方法, ...

  9. flask动态url规则

    动态URL规则 URL规则可以添加变量部分,也就是件更符合同规则的URL抽象成一个URL模式. @app.route('/item/<id>') def item(id): return ...

随机推荐

  1. AT&T推出云5G网络开源工具Airship

    导读 AT&T新推出的云5G网络依赖于一个名为“Airship”的开源供应工具,该工具在周一发布了第一个版本. AT&T负责网络云的副总裁Amy Wheelus告诉LightReadi ...

  2. TCP那些事儿

    TCP 的那些事儿(上) TCP 的那些事儿(下)

  3. 对OO原则的个人理解

    1.单一职责原则.(Single Responsibility Principle) 注解:社会化大生产分工要细.具体每个人最好只做一件事(不要一人兼多职),这样如果这个人请假或辞职,对生产不会产生影 ...

  4. CentOS7位安装MySql教程

    1.先检查系统是否装有mysql rpm -qa | grep mysql 2.下载mysql的repo源 wget http://repo.mysql.com/mysql-community-rel ...

  5. 3D绘图计算器(geogebra[5.0.385.0])使用QQ浏览器打开下载

    点击这里下载3D绘图计算器

  6. 移动端布局基础viewport

    划重点 手机屏幕相对着桌面浏览器小,传统网页的设计在手机上体验糟糕 Apple 在移动版 Safari 中定义了 viewport meta 标签(如果没记错最早提出的话),用于创建一个虚拟窗口(la ...

  7. ZROI 19.08.02 计算几何

    1.向量基础知识 \(atan2\)可以求极角,但是不是特别精确,在坐标接近\(10^{9}\)时会出锅,安全的做法是叉积. 旋转.反射和平移等都可以抽象为矩阵,即,它们可以复合.(需要一些必修四知识 ...

  8. 用css编写三角和半圆形状样式

    1.三角样式 htriangle-down { height:; border-left:11rpx solid transparent; border-right:11rpx solid trans ...

  9. percona-xtrabackup-8.0.7简单快捷使用

    percona-xtrabackup-8.0.7简单快捷使用 # 参考资料: https://blog.csdn.net/vkingnew/article/details/83012316 # 环境: ...

  10. 获取树莓派ip地址的方法

    1.有显示器​ (1)鼠标停留在屏幕右上角网络图标上,2-3秒会显示网络连接信息​(2) 图形界面下打开终端运行ifconfig命令 2.登录路由器​查看名叫raspberry的设备 3.电脑上运行命 ...