首页 > Web开发 > 详细

flask六:自定义URL转换器

时间:2019-10-31 23:33:24      阅读:162      评论:0      收藏:0      [点我收藏+]

 

 

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转换器

原文:https://www.cnblogs.com/zhongyehai/p/11774061.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!