Simplish Flask methodview décorateur

Je travaille sur un décorateur qui valide un jeton api, mon premier étant d'obtenir le décorateur dans un minimum de fonctionnement:

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

Ce type de travaux, c'est-à-dire que la vue fonctionne si le jeton est fourni, mais sinon donne une erreur 400 Bad Request. Je veux envoyer une erreur 403, mais je ne suis pas assez conscient pour l'attraper encore.

Quel est le problème avec cela qu'il renvoie seulement une erreur 400? Comment puis-je améliorer cela?

0
C'est ce que je ne savais pas à ce stade, je pense, essayons cela.
ajouté l'auteur blueblank, source
Cela fonctionne, donc je coche si vous avez fait une réponse ci-dessous. demande est un MultiDict Werkzeug, et avec cela je dois affiner ma compréhension de cela et python en général, merci.
ajouté l'auteur blueblank, source
Probablement parce que token = request.args ['token'] lance lui-même KeyError avant qu'il n'atteigne abort (403) ?
ajouté l'auteur Vikas, source
Je veux dire qu'il n'y a pas de clé jeton dans request.args . Essayez plutôt request.args.get ('token', None) et voyez si cela fonctionne.
ajouté l'auteur Vikas, source
Répondu: -) ...
ajouté l'auteur Vikas, source

1 Réponses

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

Ou:

if 'token' not in request.args or not request.args['token']
    ## Error handling
0
ajouté