Maison  >  Article  >  développement back-end  >  Programmation serveur Python : utilisation de Flask-Login pour implémenter la connexion utilisateur

Programmation serveur Python : utilisation de Flask-Login pour implémenter la connexion utilisateur

WBOY
WBOYoriginal
2023-06-18 16:40:592013parcourir

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.

  1. Création d'une application Flask

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__方法,以便在调试和测试期间查看有关用户对象的更多信息。

  1. 编写登录视图

现在,我们需要编写一个登录视图,让用户输入他们的用户名和密码。如果用户的用户名和密码正确,则登录成功,并将用户对象添加到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的用户会话中删除当前用户对象,并返回消息表示注销成功。

  1. 保护其他视图

现在,我们已经实现了用户登录系统,但我们未使用它来保护其他视图。在本示例中,我们将保护一个称为“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

Maintenant, nous avons créé avec succès une application Flask simple.
  1. 2. Créer un modèle utilisateur
Dans cet exemple, nous supposons que le nom d'utilisateur et le mot de passe de l'utilisateur ont été enregistrés dans la base de données. Nous devons donc d'abord définir le modèle utilisateur afin que, lors de la connexion, nous puissions vérifier si l'utilisateur existe.

Ajoutez le code suivant dans le fichier app.py :

python app.py

Dans 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. 🎜
🎜Dans le constructeur de la classe User, nous transmettons l'ID de l'utilisateur. Nous définissons également une méthode __repr__ pour voir plus d'informations sur l'objet utilisateur pendant le débogage et les tests. 🎜
    🎜Écriture de la vue de connexion🎜🎜🎜Maintenant, nous devons écrire une vue de connexion qui permettra à l'utilisateur de saisir son nom d'utilisateur et son mot de passe. Si le nom d'utilisateur et le mot de passe de l'utilisateur sont corrects, la connexion est réussie et l'objet utilisateur est ajouté à la session utilisateur de Flask-Login. 🎜🎜Ajoutez le code suivant dans le fichier app.py : 🎜
    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. 🎜
      🎜Protéger les autres vues🎜🎜🎜Maintenant, nous avons implémenté le système de connexion des utilisateurs, mais nous ne l'utilisons pas pour protéger d'autres vues. Dans cet exemple, nous protégerons une page appelée « profil » qui n'est accessible que lorsque l'utilisateur est connecté. Si l'utilisateur n'est pas connecté, il sera redirigé vers la page de connexion. 🎜🎜Ajoutez le code suivant dans le fichier app.py : 🎜
      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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn