也许我误解了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()...


因此,在谷歌上搜索了一些基于类的视图,但是正如我所看到的,为了定义一个函数,我定义了一个类,并将旧视图函数的内容放入了基于dispatch_request类的视图的方法中。

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

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

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


有没有办法在单个类中包含这些功能?我是否误解了Flask基于类的观点?我知道有一个MethodView类具有获取,发布,放置,删除方法,但是由于我没有创建RESTful API,也没有使用漂亮的RESTful URL,因此MethodView类似乎对我的情况没有用。

提前致谢。

最佳答案

根据我的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>

关于python - 基于类的 View flask 上的多功能,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39858256/

10-16 03:17