2016-10-04 8 views
2

多分私はFlaskのクラスベースのビューを誤解しています。私はPHP/Laravelのバックグラウンドから来ています。 Laravelでは、コントローラクラスを定義して、異なるjsonデータ、ビュー(Flaskのテンプレート)などに応答することができます。したがって、私が行う唯一のことは、ルートを定義し、そのルートをコントローラクラスの特定のメソッドに関連付けることです。クラスベースのビューフラスコの複数の関数フラスコ

このような擬似コード:フラスコに

On POST associate /path to [email protected] 
On GET associate /path to [email protected] 
On GET associate /path/extra to [email protected] 
... 

私は分離機能としてそれらを持っているでしょう。何かのように:

def doPostFunction()... 
def someGetFunction()... 
def someOtherGetFunction()... 

だから少しグーグルで、クラスベースのビューがありますが、私はそれを見たように、私はクラスを定義する機能を定義するinstedと dispatch_requestクラス内の古いビュー機能の内容を置きますベースのビューのメソッドです。

class DoPostClass(View): 
    dispatch_request() 
     ... 

class DoGetClass(View): 
    dispatch_request() 
     ... 

class DoSomeOtherGetClass(View): 
    dispatch_request() 
     ... 

これらの機能を1つのクラスに含める方法はありますか?私はFlaskのクラスベースの意見を誤解していますか?メソッドを取得、ポスト、put、削除するMethodViewクラスがあることはわかっていますが、RESTful APIを作成していないので、nice-RESTfulなURLを使用していないため、MethodViewクラスが私の場合には役に立たないようです。

ありがとうございます。

答えて

1

私のlaravel/flaskプロジェクトの経験に基づいて、コントローラ/ビューの高級なコードは同じです。お試しくださいflask-classy拡張子

以下はflask-classyに基づく例です。

ディレクトリ

. 
├── index.py 
└── views 
    ├── __init__.py 
    └── myView.py 

myView.py

from flask_classy import FlaskView 

class myView(FlaskView): 
    def index(self): 
     return "this is index" 

    def get(self, id): 
     return "this is page " + str(id) 

index.py

from flask import Flask 
from views.myView import myView 

app = Flask(__name__) 
myView.register(app) 

実行

$ export FLASK_APP=index.py 
$ flask run 
# Index: http://127.0.0.1:5000/my 
# Get: http://127.0.0.1:5000/my/<id> 
+0

驚くべきことに、まさに私が望むもの。どうもありがとうございました –

関連する問題