2017-12-03 2 views
-1

Ich habe eine Kolben-Anwendung mit vielen Routenendpunkten. In jeder dieser Routen muss ich einige allgemeine Operationen durchführen, wie Authentifizierungsprüfung, Validierungslogik für die Berechtigung, XSS-Validierung und einige weitere gängige Validierungslogiken. Ich habe einige Beiträge gelesen, in denen es heißt, login_required decorator in allen Methoden für die Authentifizierungsprüfung zu verwenden.wo gemeinsame Logik in Flask Routen

Nun meine Frage ist, sollte ich einen Dekorator für jede der Validierungstyp erstellen und sie in jeder Methode verwenden. Bitte lassen Sie mich wissen, wie man solche Fälle in der Flask-Anwendung behandelt.

@Login_required() 
@Xss_validate() 
@permission_check() 
def subsribe_service(cs_dict, data_dict): 
    Logic to subscribe.... 

@Login_required() 
@Xss_validate() 
@permission_check() 
def unsubsribe_service(cs_dict, data_dict): 
    Logic to unsubscribe.... 

@Login_required() 
@Xss_validate() 
@permission_check() 
def delete_service(cs_dict, data_dict): 
    Logic to delete.... 

@Login_required() 
@Xss_validate() 
@permission_check() 
def edit_service(cs_dict, data_dict): 
    Logic to edit.... 

Wie Sie sehen können, habe ich gemeinsame Logik als Dekorateur in allen Aktionsmethoden. Ich habe solche Dekoratoren in allen Anwendungen, da jede Aktion diese 3 Logik erfordert.

+0

Sie müssen [Blueprints] (http://flask.pooco.org/docs/0.12/blueprints/) –

+0

Ich verstehe nicht, wie Blueprint das Problem lösen wird. Blueprints sollen die Anwendungen trennen. – user1592389

Antwort

0

einen Blick aus dieser Kolben Erweiterungen
Flask-WTF

Flask-Login

Flask-Principal

diesen Erweiterungen bereits alles, was Sie haben

erwähnt haben
+0

Ich denke es geht nicht um welche Erweiterungen ich benutze. Es geht darum, wo ich diese Implementierungen aufbewahre. – user1592389

0

add: Sie ähnliche Ansichten wie die Klasse Steckbar basierend Ansichten: Ei:

from flask import Flask 
from flask.views import MethodView 

app = Flask(__name__) 

class BaseViews(MethodView): 
    decorators = [Login_required, Xss_validate, permission_check] 

class SubsribeService(BaseViews): 
    def get(self): 
     # get Logic 

    def post(self): 
     # post logic 

class EditService(BaseViews): 
    def get(self): 
     # get Logic 

    def post(self): 
     # post logic 

app.add_url_rule('/subsribe_service/', view_func=SubsribeService.as_view('subsribe_service'), methods=['GET', 'POST']) 
app.add_url_rule('/edit_service/', view_func=EditService.as_view('edit_service'), methods=['GET', 'POST']) 

einfach einfach und schön ..!