2016-10-04 54 views
2

也許我誤解了Flask上的基於類的視圖。我來自PHP/Laravel背景。在Laravel上,我可以定義一個控制器類,在那裏我可以響應不同的json數據,視圖(Flask上的模板)等等。所以我唯一要做的就是定義一個路由並將該路由關聯到控制器類上的特定方法。基於類的視圖上的多個函數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()... 

所以google搜索了一下,有基於類的意見,但我看到它,insted的定義函數我定義一個類,並把舊的視圖功能裏面的內容dispatch_request類基於視圖的方法。

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

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

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

有沒有辦法讓這些功能在一個類內?我誤解了Flask的基於類的視圖嗎?我知道有一個MethodView類有get,post,put,delete方法,但由於我沒有創建一個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

令人驚歎!,正是我想要的。非常感謝你 –

相關問題