Heim > Artikel > Backend-Entwicklung > Flask Framework-Studienhandbuch zur Benutzer-Login-Verwaltung
Setzen Sie die Reise zum Flask-Lernen fort. Heute werde ich das Login-Verwaltungsmodul von Flask vorstellen. Erinnern Sie sich noch an das kleine Blog-Projekt im vorherigen Artikel? Der Login ist der Bestätigungscode, den wir selbst geschrieben haben. Er besteht wahrscheinlich aus den folgenden Schritten:
1. Geben Sie Benutzernamen und Passwort in das Anmeldefeld ein2. Die Flaschenansichtsfunktion ruft das Benutzerkennwort ab und fragt dann die Benutzerinformationen in der Datenbank nach Übereinstimmung ab
3. Bei Erfolg in die Sitzung schreiben und zur Startseite weiterleiten
4. Wenn Sie sich anmelden müssen, um auf eine bestimmte Ansicht zuzugreifen, müssen Sie in jeder Ansichtsfunktion überprüfen, ob der Benutzer in der Sitzung vorhanden ist.
Heute transformieren wir das Blog-Projekt weiter. Das eingeführte Flask-Login-Modul soll uns dabei helfen, diese öffentlichen Funktionen zu verwalten, die weniger geschäftsbezogen sind. Es kann uns helfen:
Speichern Sie die aktuell aktive Benutzer-ID in der Sitzung, sodass Sie sich frei an- und abmelden können.
Ermöglicht Ihnen, die Ansichten einzuschränken, auf die angemeldete (oder abgemeldete) Benutzer zugreifen können.
Umgang mit der kniffligen Funktion „An mich erinnern“.
Hilft Ihnen, Benutzersitzungen vor Cookie-Diebstahl zu schützen.
Kann in Flask-Principal oder andere Authentifizierungserweiterungen integriert werden, die später verwendet werden können.
1. Wie verwende ich das Flask-Login-Modul?
1. Flask-Login installieren
E:workdirdct-server-5055187src>pip install flask-login
2.1) Hinzufügen:
in /blog2/__init__.py
#引用包 from flask.ext.login import LoginManager #登陆管理 #声明login对象 login_manager = LoginManager() #初始化绑定到应用 login_manager.init_app(app) #声明默认视图函数为login,当我们进行@require_login时,如果没登陆会自动跳到该视图函数处理 login_manager.login_view = "login" #当登陆成功后,该函数会自动从会话中存储的用户 ID 重新加载用户对象。它应该接受一个用户的 unicode ID 作为参数,并且返回相应的用户对象。 @login_manager.user_loader def load_user(userid): return User.query.get(int(userid))2.2) Ändern Sie das Benutzermodell (der rote Teil ist der neue Code)
from flask.ext.login import UserMixin from blog2 import db class User(db.Model, UserMixin): __tablename__ = 'b_user' id = db.Column(db.Integer,primary_key=True) username = db.Column(db.String(10),unique=True) password = db.Column(db.String(16)) def __init__(self,username,password): self.username = username self.password = password def __repr__(self): return '<User %r>' % self.usernameDie Benutzerklasse muss die folgenden Methoden implementieren:
is_authenticated
is_active
is_anonymous
get_id()
Um Benutzerklassen einfach zu implementieren, können Sie von UserMixin erben, das Standardimplementierungen aller dieser Methoden bereitstellt. Wir verwenden UserMixin, um es hier zu implementieren.
from flask.ext.login import login_required, login_user, logout_user from blog2.model.User import User from blog2.model.Category import Category import os from blog2 import app,db from flask import request,render_template,flash,abort,url_for,redirect,session,Flask,g @app.route('/') @login_required def show_entries(): categorys = Category.query.all() return render_template('show_entries.html',entries=categorys) @app.route('/add',methods=['POST']) @login_required def add_entry(): #—————————————————————————————————————————————— # 第一版登陆方式 # if not session.get('logged_in'): # abort(401) #—————————————————————————————————————————————— title = request.form['title'] content = request.form['text'] category = Category(title,content) db.session.add(category) db.session.commit() flash('New entry was successfully posted') return redirect(url_for('show_entries')) @app.route('/login',methods=['GET','POST']) def login(): error = None if request.method == 'POST': user = User.query.filter_by(username=request.form['username']).first() #—————————————————————————————————————————————————————————————————————————— #第一版登陆方式 # passwd = User.query.filter_by(password=request.form['password']).first() # # if user is None: # error = 'Invalid username' # elif passwd is None: # error = 'Invalid password' # else: # session['logged_in'] = True # flash('You were logged in') # return redirect(url_for('show_entries')) #—————————————————————————————————————————————————————————————————————————— login_user(user) flash('Logged in successfully.') return redirect(url_for('show_entries')) return render_template('login.html', error=error) @app.route('/logout') @login_required def logout(): #—————————————————————————————————————————————— # 第一版登出方式 # session.pop('logged_in', None) #—————————————————————————————————————————————— logout_user() flash('You were logged out') return redirect(url_for('show_entries'))Verwalten Sie die Anmeldung über flask-login. Der Code ist sehr einfach und unkompliziert:
@login_required: Dieser Dekorator wird in der Ansicht platziert, für deren Zugriff eine Anmeldung erforderlich ist. Wenn für den Zugriff auf die eingeschränkte Ansicht keine Anmeldung vorhanden ist, springt er zur Anmeldeseite, gesteuert durch login_manager.login_view = „login“ in __init__. py
login_user(user): Übergeben Sie ein Benutzerobjekt zur Anmeldeüberprüfung, geben Sie „true“ zurück, wenn es korrekt ist, andernfalls geben Sie „false“ zurück
logout_user(): Abmeldefunktion, Benutzerinformationen in der Sitzung löschen
{% if current_user.is_authenticated() %} Hi {{ current_user.name }}! {% endif %}Ändern Sie die Methode zur Bestimmung, ob der Benutzer in den vorherigen Vorlagen „layout.html“ und „show_entries.html“ angemeldet ist, in die Methode in „flask-login“:
{% if not current_user.is_authenticated() %}
Nachdem sich der Benutzer angemeldet hat, lautet der Wert 97380c8f5e24dafe948d47dc8d6d6a44
【Referenzdokument】
Englische Version von Flask-Login: http://flask-login.readthedocs.io/en/latest/