简单的Flask methodView装饰器

我正在开发一个验证api标记的装饰器,我的第一个工作是以最小的工作顺序获取装饰器:

def check_token(view_method):
    @wraps(view_method)
    def wrapped_view(*args, **kwargs):
        token = request.args['token']
        if token is None:
            abort(403)
        return view_method(*args, **kwargs)
    return wrapped_view

这种工作,即如果提供了令牌,则视图有效,但如果不提供400错误请求错误。我想发送一个403错误,但我还没有意识到这一点。

这是什么错误,它只返回400错误?我该如何改进?

0
额外 编辑
意见: 1
那是我现在不知道的,我想,让我们试试看。
额外 作者 blueblank,
这是有效的,所以如果你在下面做了回答,我会选中它。请求是一个Werkzeug MultiDict,因此我需要改进我对Python和Python的一般理解,谢谢。
额外 作者 blueblank,
可能是因为 token = request.args ['token'] 本身在到达 abort(403)之前正在抛出 KeyError
额外 作者 Vikas,
我的意思是 request.args 中没有关键的 token 。试试 request.args.get('token',None),看看是否有效。
额外 作者 Vikas,
已回答: - )...
额外 作者 Vikas,

1 答案

request.args is a MultiDict and it raises if a key is requested which is not there in dict. Here request.args['token'] raises before it reaches to abort(403). Few solutions are:

## If a 2nd optional argument is provided to dict.get then
## it does not raise if key is not found. Instead returns
## the 2nd argument passed as default.

token = request.args.get('token', None)
    if not token:
        ## Error handling

要么:

if 'token' not in request.args or not request.args['token']
    ## Error handling
0
额外