J'essaie d'utiliser l'utilisateur actuel à mon avis depuis flask-login. J'ai donc essayé de g object
J'assigne flask.ext.login.current_user
à l'objet g
@pot.before_request
def load_users():
g.user = current_user.username
Cela fonctionne si l'utilisateur a raison. Mais quand je le fais inscription ou connectez-vous avec des informations d'identification erronées, j'obtiens cette erreur
AttributeError: 'AnonymousUserMixin' object has no attribute 'username'
Veuillez m'éclairer où je me trompe ...
Merci pour votre réponse @Joe et @pjnola, comme vous l'avez tous suggéré, je me suis référé flask-login docs
J'ai trouvé que nous pouvons personnaliser la classe d'utilisateurs anonymes, j'ai donc personnalisé pour mes besoins,
Anonymous class
#!/usr/bin/python
#flask-login anonymous user class
from flask.ext.login import AnonymousUserMixin
class Anonymous(AnonymousUserMixin):
def __init__(self):
self.username = 'Guest'
Ensuite, j'ai ajouté cette classe à anonymous_user
login_manager.anonymous_user = Anonymous
À partir de cela, il a pu récupérer le nom d'utilisateur s'il s'agissait d'une demande anonyme.
Eh bien, le message d'erreur dit tout. Il n'y a aucun utilisateur connecté, donc current_user
renvoie un AnonymousUserMixin
. AnonymousUserMixin
implémente l'interface décrite ici: http://flask-login.readthedocs.org/en/latest/#your-user-class (qui n'inclut pas de username
propriété). Essayez quelque chose comme ceci:
@pot.before_request
def load_users():
if current_user.is_authenticated():
g.user = current_user.get_id() # return username in get_id()
else:
g.user = None # or 'some fake value', whatever
De toute évidence, le reste de votre code doit faire face à la possibilité que g.user
ne fera pas référence à un utilisateur réel.
AnonymousUserMixin n'a pas d'attribut de nom d'utilisateur. Vous devez écraser l'objet et appeler le mixin. Jetez un œil à LoginManager.anonymous_user qui est un objet utilisé quand aucun utilisateur n'est connecté.
Vous devez également obtenir l'utilisateur de quelque part. Il est inutile de stocker le nom d'utilisateur dans g
car vous pouvez simplement utiliser current_user.username.
Si vous vouliez obtenir le nom d'utilisateur dont vous auriez besoin aussi
if current_user.is_authenticated():
g.user = current_user.username
Cela nécessiterait que l'objet utilisateur possède une propriété appelée nom d'utilisateur. Il existe de nombreuses façons de personnaliser l'utilisation de Flask-Logins
Je suggère de relire les documents et de jeter un œil au code source:
https://github.com/maxcountryman/flask-login/blob/master/flask_login.py
Joe