Flask——转换器

转换器,顾名思义,是进行类型转换的。

首先,我们通过打印app中的converters可以看到,Flask内置的转换器有如下:

print('converters:', app.url_map.converters)

converters: {

        'default': <class 'werkzeug.routing.UnicodeConverter'>,

        'string': <class 'werkzeug.routing.UnicodeConverter'>,

        'any': <class 'werkzeug.routing.AnyConverter'>,

        'path': <class 'werkzeug.routing.PathConverter'>,

        'int': <class 'werkzeug.routing.IntegerConverter'>,

        'float': <class 'werkzeug.routing.FloatConverter'>,

        'uuid': <class 'werkzeug.routing.UUIDConverter'>

}

也就是说,我们在写路由时,这上面几种类型的是可以随意转换的,比如:

@app.route('fruits/<id>')
def get_fruit(id):
    print(id,type(id))
    return 'Fruit page!'

这里打印结果是

 可以看出,我们路由中传入的1,是字符串类型,并非int;倘若非要用int类型,那么这时就可以使用转换器解决。

上段代码的路由可以改为:

@app.route('fruits/<int:id>')

打印结果:1 <class 'int'>

补充:int:接收正整数; string: 接受任何不包含‘/’的文本; float:接收正浮点数; path:接收包含‘/’的文本。

 

另外,我们还会遇到再路由中验证手机号/邮箱等业务,这种情况下需要使用正则来自定义转换器。

第一步:导包

自定转换器集成自werkzeug.routing中的BaseConverter类

from werkzeug.routing import BaseConverter

第二步:编写自定义函数

class RegexConverter(BaseConverter):
    '''自定义转换器'''
    regex = '1\d{10}'
    def __init__(self, url_map):
        #调用父类方法
        super(RegexConverter, self).__init__(url_map)

    def to_python(self, value):
        #父类方法已实现好了
        return value

这里可以参考BaseConverter类中其他转换器来仿写。

        要验证手机号或者是邮箱,主要是写正则匹配。

第三步:把自定义转换器添加到转换器中

我们要想使用自定义转换器,需要把我们自定义的类加入到app.url_map.converters中才可以使用。

app.url_map.converters['phone'] = RegexConverter # {'phone' : RegexConverter}

这里,可以print一下app中的converters,发现自定义的转换器成功添加到了converters中。

 

 

第四步:写路由

@app.route('/convert/<phone:value>')
def convert(value):
    return '恭喜手机号为{}的用户,学会了自定义转换器'.format(value)

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值