基于类的视图瓶上的多个函数

时间:2016-10-04 17:22:13

标签: python flask

也许我误解了关于Flask的基于类的观点。我来自PHP / Laravel背景。在Laravel上我可以定义一个控制器类,我可以在其中响应不同的json数据,视图(Flask上的模板)等。所以我唯一要做的就是定义一个路由并将该路由与控制器类上的特定方法相关联。

像这样的伪代码:

On POST associate /path to MyControllerClass@doPostMethod
On GET associate /path to MyControllerClass@someGetMethod
On GET associate /path/extra to MyControllerClass@someOtherGetMethod
...

在Flask上我会将它们作为分离的函数。类似的东西:

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

所以google了一下,有基于类的视图,但正如我所看到的那样,我定义了一个函数,我定义了一个类,并将旧视图函数的内容放在 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,我也没有使用好的RESTful url,所以MethodView类似乎对我的情况没用。

提前致谢。

1 个答案:

答案 0 :(得分: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>