Heim  >  Artikel  >  Backend-Entwicklung  >  Flask Framework-Studienhandbuch zur Benutzer-Login-Verwaltung

Flask Framework-Studienhandbuch zur Benutzer-Login-Verwaltung

WBOY
WBOYOriginal
2016-12-05 13:27:221617Durchsuche

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 ein

2. 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. Verwenden Sie 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.username

Die Benutzerklasse muss die folgenden Methoden implementieren:

is_authenticated

Gibt „True“ zurück, wenn der Benutzer authentifiziert ist, d. h. wenn ein gültiger Nachweis erbracht wird (nur authentifizierte Benutzer erfüllen die Bedingung „login_required“).


is_active

Gibt „True“ zurück, wenn es sich um einen aktiven Benutzer handelt und dieser verifiziert wurde, das Konto aktiviert ist, nicht deaktiviert wurde und keine der Bedingungen Ihrer Anwendung für die Ablehnung eines Kontos erfüllt. Inaktive Konten dürfen nicht angemeldet werden (es sei denn, man wird dazu gezwungen).


is_anonymous

Wenn es sich um einen anonymen Benutzer handelt, geben Sie True zurück. (Echte Benutzer sollten False zurückgeben.)


get_id()

Gibt einen Unicode zurück, der den Benutzer eindeutig identifiziert und zum Laden des Benutzers aus dem user_loader-Rückruf verwendet werden kann. Beachten Sie, dass es sich um einen Unicode handeln muss. Wenn die ID ursprünglich vom Typ „int“ oder ein anderer Typ ist, müssen Sie sie in Unicode konvertieren.

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.

2.3) Ändern Sie die Ansichtsfunktion (der rote Teil ist neu)

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

2.4) Referenzbenutzer in Vorlagen


{% 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() %}

aktueller_Benutzerwert: Wenn der Benutzer nicht angemeldet ist, lautet der Wert 5689e0c1fb782fe7003c7c8c55c92771, bei dem es sich um einen anonymen Benutzer handelt

Nachdem sich der Benutzer angemeldet hat, lautet der Wert 97380c8f5e24dafe948d47dc8d6d6a44

Natürlich kann die Benutzeranmeldung auch an die tatsächliche Situation angepasst werden und die Details werden nicht einzeln aufgeführt.

【Referenzdokument】


Chinesische Version von Flask-Login: http://www.pythondoc.com/flask-login/#id1

Englische Version von Flask-Login: http://flask-login.readthedocs.io/en/latest/

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn