2016-07-30 13 views
2

Ich habe gerade mit Flask angegeben und versucht, ein kleines Feature in meinem Projekt zu implementieren. Das Ziel besteht darin, ein Cookie nur dann zu setzen, wenn die Anfrage von einem authentifizierten Benutzer kommt.Middleware in Kolben

Ich habe zwei Möglichkeiten gefunden, dies zu tun.

Erste Methode

@app.before_request 
def before_request(): 
    # set cookie if user is logged in 

Zweite Methode, durch so etwas wie diese Umsetzung adding-a-simple-middleware-to-your-flask-application

Kann mir jemand erklären, was die wichtigsten Unterschiede zwischen den beiden Methoden sind und wann und wo das Verfahren verwendet werden soll, .

Außerdem verwende ich derzeit "flask-login", um den angemeldeten Benutzer zu verfolgen. Wenn ich die erste Methode verwenden, kann ich leicht überprüfen, ob jemand durch den Import der current_user angemeldet ist

from flask.ext.login import current_user 

aber wenn ich versuche, das gleiche zu tun, während die zweite Methode verwenden, die current_user ist immer „None“ als Der Anwendungskontext ist falsch.

Also wollte ich wissen, ob ich entschieden habe, mit der zweiten Implementierung fortzufahren, wie überprüfe ich, ob der Benutzer eingeloggt ist oder nicht.

Antwort

1

Ich habe noch nie die zweite Methode verwendet, die Sie erwähnt haben. Ich bin mir sicher, dass es damit gemacht werden kann, aber es ist sehr ungewöhnlich. Ich würde vorschlagen, häufiger verwendete Merkmale der Flasche zu verwenden. Aus Gründen der Betreuer Ihres Codes :) So ist die erste Methode, die Sie erwähnt haben, in Ordnung.

Oder Sie können decorators für detailliertere Zugriffsbeschränkungen verwenden. Beachten Sie, dass setting cookies in flask durchgeführt werden kann, wenn Sie ein tatsächliches Antwortobjekt erstellen. Das bedeutet, dass Sie Deferred Request Callbacks für das Setzen von Cookies in dekorierter Funktion verwenden sollten.

+0

danke für die Antwort. Ich habe die erforderlichen Funktionen mithilfe der von Ihnen erwähnten Calls für verzögerte Anfragen implementiert – amarok