我正在研究一个验证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 Bad Request错误。我想发送一个403错误,但我还没有意识到这一点。
这有什么问题,只返回400错误?我该如何改进?
答案 0 :(得分:3)
request.args
是MultiDict
,如果请求的密钥在dict中不存在则会引发。 request.args['token']
在abort(403)
到达## 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
或者:
{{1}}