python装饰器解析请求参数_我如何在装饰器中获得Flask可选的URL参数?

有一种更好的机制可以验证内置到Werkzeug(和Flask)中的url值.定义一个converter并像使用路由中的任何其他转换器一样使用它(例如,< int:id>).

from werkzeug.routing import BaseConverter, ValidationError

class PhoneConverter(BaseConverter):

regex = r'\d{7,10}' # this validates the basic form of the value

def to_python(self, value):

# do more complicated validation

if not complicated_phone_validation(value):

raise ValidationError('not a valid phone number')

return value

app.url_map.converters['phone'] = PhoneConverter

@app.route('/')

def get_phone(phone):

# phone is valid

您也可以使用before_request函数通过电话参数验证所有路由,而不必修饰所有路由.

from flask import request, abort

@app.before_request

def valid_phone():

if 'phone' not in request.view_args:

return # view has no phone arg

if not complicated_phone_validation(request.view_args['phone']):

abort(404)

@app.route('/')

def get_phone(phone):

# phone is valid

@app.route('/')

def get_other(other):

# no phone arg, no validation

如果您真的想使用装饰器,则装饰函数将使用参数进行调用.

from functools import wraps

def check_phone(f):

@wraps(f)

def inner(**kwargs):

phone = kwargs['phone']

# do some validation

return f(**kwargs)

return inner

@app.route('/')

@check_phone

def get_phone(phone):

# phone is valid

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值