Maison > Article > développement back-end > Programmation serveur Python : utilisation de Flask-Login pour implémenter la connexion utilisateur
Programmation serveur Python : utilisez Flask-Login pour implémenter la connexion utilisateur
Avec le développement et la popularité des applications Web, la connexion utilisateur est devenue une fonction essentielle pour de nombreuses applications. Dans la programmation serveur Python, Flask est un framework de développement Web largement utilisé. De plus, Flask fournit également de nombreuses extensions tierces, telles que Flask-Login, qui peuvent nous aider à mettre en œuvre rapidement les fonctions de connexion des utilisateurs.
Cet article expliquera comment utiliser l'extension Flask-Login pour implémenter la fonction de connexion utilisateur sur le serveur Python. Avant cela, nous devons installer l'extension Flask et Flask-Login. Vous pouvez utiliser la commande pip pour installer :
pip install Flask Flask-Login
Commençons maintenant à implémenter notre système de connexion utilisateur.
Tout d'abord, nous devons créer une application Flask. Créez un fichier app.py dans le répertoire racine et écrivez-y le code suivant :
from flask import Flask app = Flask(__name__) @app.route("/") def index(): return "Hello World!" if __name__ == "__main__": app.run(debug=True)
Dans cet exemple, nous avons créé une application Flask et défini une route, et la route racine renvoie "Hello World !". Nous utilisons également une instruction conditionnelle __name__ == "__main__"
pour garantir que l'application Flask ne s'exécute que lorsque nous exécutons le script. __name__ == "__main__"
条件语句来确保只有在我们运行脚本时才运行Flask应用程序。
现在,我们已经成功创建了一个简单的Flask应用程序。
2.创建用户模型
在本示例中,我们假设用户的用户名和密码已经保存到数据库中。因此,我们需要先定义用户模型,以便在登录时检查用户是否存在。
在app.py文件中添加以下代码:
from flask_login import UserMixin class User(UserMixin): def __init__(self, id): super().__init__() self.id = id def __repr__(self): return f"<User {self.id}>"
在这个示例中,我们定义了一个User类,它继承自Flask-Login的UserMixin
类。UserMixin
提供了一些有用的属性和方法,包括:
is_authenticated
:如果用户已经通过验证,则为True。is_active
:如果用户处于活动状态,则为True。is_anonymous
:如果用户未经身份验证,则为True。get_id
:返回用户ID的字符串表示形式。在User类的构造函数中,我们传入了用户的ID。我们还定义了一个__repr__
方法,以便在调试和测试期间查看有关用户对象的更多信息。
现在,我们需要编写一个登录视图,让用户输入他们的用户名和密码。如果用户的用户名和密码正确,则登录成功,并将用户对象添加到Flask-Login的用户会话中。
在app.py文件中添加以下代码:
from flask_login import LoginManager, login_user, current_user login_manager = LoginManager() login_manager.init_app(app) @login_manager.user_loader def load_user(user_id): return User(user_id) @app.route("/login") def login(): user_id = request.args.get("user_id") password = request.args.get("password") if user_id and password: # 省略查询数据库的代码 user = User(user_id) login_user(user) return "Login success!" else: return "Login failed!" @app.route("/logout") def logout(): logout_user() return "Logout success!"
在这个示例中,我们首先创建了一个LoginManager
对象。然后,我们定义了一个user_loader
回调函数,该函数将用户ID作为参数,并返回与该ID对应的用户对象。在本示例中,我们创建了一个新的User
对象,并将该ID作为参数传递。
接下来,我们定义了一个登录视图。在视图函数中,我们使用request.args.get
方法从查询字符串中获取用户ID和密码。然后,我们检查用户ID和密码是否有效。如果用户的用户名和密码正确,则创建一个新的User
对象,并使用login_user
函数将该对象添加到Flask-Login的用户会话中。如果用户的用户名和密码不正确,则该用户无法登录。
最后,我们定义了一个注销视图,它使用logout_user
函数从Flask-Login的用户会话中删除当前用户对象,并返回消息表示注销成功。
现在,我们已经实现了用户登录系统,但我们未使用它来保护其他视图。在本示例中,我们将保护一个称为“profile”的页面,该页面只有在用户登录后才可以访问。如果用户未登录,则将重定向到登录页面。
在app.py文件中添加以下代码:
from flask_login import login_required @app.route("/profile") @login_required def profile(): return f"Welcome, {current_user.id}!"
在这个示例中,我们使用login_required
装饰器来保护“profile”路由。如果用户未登录,则该装饰器将重定向到登录页面。
在保护视图时,我们还使用current_user
python app.pyDans cet exemple, nous définissons une classe User qui hérite de la classe
UserMixin
de Flask-Login. UserMixin
fournit quelques propriétés et méthodes utiles, notamment :
is_authenticated
: True si l'utilisateur a été authentifié.
is_active
: Vrai si l'utilisateur est actif.
is_anonymous
: Vrai si l'utilisateur n'est pas authentifié.
get_id
: renvoie la représentation sous forme de chaîne de l'ID utilisateur. 🎜__repr__
pour voir plus d'informations sur l'objet utilisateur pendant le débogage et les tests. 🎜http://localhost:5000/🎜Dans cet exemple, nous créons d'abord un objet
LoginManager
. Ensuite, nous définissons une fonction de rappel user_loader
qui prend l'ID utilisateur comme paramètre et renvoie l'objet utilisateur correspondant à cet ID. Dans cet exemple, nous créons un nouvel objet User
et passons l'ID en paramètre. 🎜🎜Ensuite, nous définissons une vue de connexion. Dans la fonction d'affichage, nous utilisons la méthode request.args.get
pour obtenir l'ID utilisateur et le mot de passe à partir de la chaîne de requête. Ensuite, nous vérifions si l'identifiant et le mot de passe sont valides. Si le nom d'utilisateur et le mot de passe de l'utilisateur sont corrects, créez un nouvel objet User
et ajoutez l'objet à la session utilisateur de Flask-Login à l'aide de la fonction login_user
. Si le nom d'utilisateur et le mot de passe d'un utilisateur sont incorrects, l'utilisateur ne peut pas se connecter. 🎜🎜Enfin, nous définissons une vue de déconnexion, qui utilise la fonction logout_user
pour supprimer l'objet utilisateur actuel de la session utilisateur de Flask-Login et renvoie un message indiquant une déconnexion réussie. 🎜http://localhost:5000/profile🎜Dans cet exemple, nous utilisons le décorateur
login_required
pour protéger la route "profile". Si l'utilisateur n'est pas connecté, ce décorateur sera redirigé vers la page de connexion. 🎜🎜Lors de la protection de la vue, nous utilisons également la variable globale current_user
pour accéder aux informations de l'utilisateur actuellement connecté. Dans cet exemple, nous ajoutons un simple message de bienvenue qui contient l'ID de l'utilisateur actuellement connecté. 🎜🎜🎜Exécutez l'application🎜🎜🎜Maintenant, nous avons terminé toute la mise en œuvre du système de connexion utilisateur. Exécutons l'application et testons-la. 🎜🎜Entrez la commande suivante dans le terminal pour lancer l'application : 🎜http://localhost:5000/login?user_id=1&password=password123🎜Entrez l'URL suivante dans le navigateur pour accéder à la page d'accueil : 🎜
http://localhost:5000/logout🎜Vous devriez voir la chaîne "Hello World!". Essayez maintenant d'accéder à l'URL suivante : 🎜rrreee🎜 Puisque vous n'êtes pas un utilisateur authentifié, vous serez redirigé vers la page de connexion. Entrez un identifiant et un mot de passe valides dans la chaîne de requête, par exemple : 🎜rrreee🎜 Si vous avez entré le nom d'utilisateur et le mot de passe corrects, vous devriez voir le message « Connexion réussie ! » Maintenant, accédez à nouveau à la route "/profile" et elle devrait afficher un message de bienvenue contenant l'ID de l'utilisateur actuellement connecté. 🎜
如果你在浏览器中访问以下URL,则可以注销当前会话:
http://localhost:5000/logout
这样就完成了用户登录系统的所有实现。
总结
在本文中,我们介绍了如何使用Flask-Login扩展在Python服务器中实现用户登录功能。使用Flask-Login可以方便地验证和保护Web应用程序中的用户数据。此外,Flask-Login提供了许多有用的功能和方法,如会话管理和用户保护。希望这篇文章能够帮助你更好地了解如何使用Flask-Login编写Python服务器应用程序。
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!