2017-12-03 13 views
-1

私は多くのルートエンドポイントを持つフラスコアプリケーションを持っています。これらのルートのそれぞれでは、認証チェック、許可用の検証ロジック、XSS検証などの一般的な操作を行う必要があります。私は、認証検証のためのすべてのメソッドでlogin_requiredデコレータを使用していると書かれている記事はほとんど読んでいません。Flaskルートに共通ロジックを配置する場所

今私の質問は、検証の種類ごとにデコレータを作成し、すべてのメソッドで使用する必要があります。 Flaskアプリケーションでこのようなケースを処理する方法を教えてください。

@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.... 

ご覧のとおり、すべてのアクションメソッドで共通のロジックをデコレータとして使用しています。私はすべてのアクションがこれらの3つのロジックを必要とするので、すべてのアプリケーションでこのようなデコレータを使用しています。

+0

[青写真](http://flask.pocoo.org/docs/0.12/blueprints/)を使用する必要があります –

+0

青写真がどのように問題を解決するのか分かりません。 Blueprintはアプリケーションを分離するためのものです。 – user1592389

答えて

0

これらの拡張子がすでに

+0

私が使っている拡張機能ではないと思います。それは私がそれらの実装をどこに保つかについてです。 – user1592389

0

アドオンを記載しているすべてのものを持って、このフラスコの拡張子
Flask-WTF

Flask-Login

Flask-Principal

オフ見てみましょう:あなたは、ベースクラスに似たビューをプラグイン可能なことができます再生回数: 卵:

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']) 

シンプルで綺麗です!

関連する問題