2017-04-18 1 views
0

J'ai écrit un décorateur de connexion, qui devrait garantir, que l'utilisateur est correctement connecté avant d'exécuter une autre fonction. Le problème est que, bien que le décorateur fonctionne comme prévu, la fonction enveloppée par la fonction n'est jamais exécutée. Ma structure est comme ce qui suit: décorateur n'appelant pas la fonction enveloppée

#This is my decorator 
login_required(func): 
    def func_wrapper(*args, **kwargs): 
     #do some operations 
     return True #or False 
    return func_wrapper 

@login_required 
def do_something(param1, param2, param3): 
    print("This print is not executing") 
    #continue the work that should be done after 
    #the user is authorized by the login decorator 

Je l'ai déjà essayé d'enlever le retour Vrai/Faux à l'intérieur du décorateur, mais cela n'a rien changé.

Répondre

3

Votre fonction wrapper n'appelle jamais func. Si vous voulez func à appeler lorsque l'emballage est invoqué, appeler, par exemple .:

def login_required(func): 
    def func_wrapper(*args, **kwargs): 
     #do some operations to determine if user logged in and allowed to do op 
     if allowed: 
      return func(*args, **kwargs) 
     else: 
      # Raise exception, return "auth required" sentinel value, whatever 
    return func_wrapper 

Votre code est en supposant que le retour d'un booléen déterminera en quelque sorte si le enveloppé func obtient invoquaient, mais ce Travaillons pas comment les décorateurs. Ils remplacer la fonction d'origine avec tout ce que le décorateur retourne; Si vous renvoyez une nouvelle fonction, cette nouvelle fonction est chargée d'invoquer la fonction d'origine (si vous le souhaitez), personne d'autre ne le fera pour vous.

+0

eh bien, c'était juste stupide. Je n'ai jamais appelé ma fonction func, donc elle n'a évidemment jamais été appelée. Merci beaucoup! – Depa