2012-05-24 34 views
0

我工作的一個驗證的API令牌的裝飾,我首先是獲得裝飾中一些最起碼的工作順序:Simplish瓶methodview裝飾

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錯誤?我該如何改進?

+1

可能是因爲'令牌= request.args中[ '令牌']'本身是拋出'KeyError'到達之前'中止(403)'? – Vikas

+1

我的意思是'request.args'中沒有關鍵'token'。嘗試'request.args.get('token',None)'而不是看看是否有效。 – Vikas

+0

這就是我不知道在這一點上,我想,讓我們試試。 – blueblank

回答

3

request.args是一個MultiDict並且如果在字典中不存在請求的密鑰,它會引發。這裏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