简体   繁体   English

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

[英]Multiple functions on class-based views flask

maybe I'm misunderstanding class-based views on Flask.也许我误解了 Flask 的基于类的观点。 I come from a PHP/Laravel background.我来自 PHP/Laravel 背景。 On Laravel I can define a controller class where I can response different json data, views (templates on Flask), etc. So the only thing I do is define a route and associate that route to a specific method on a controller class.在 Laravel 上,我可以定义一个控制器类,我可以在其中响应不同的 json 数据、视图(Flask 上的模板)等。所以我唯一要做的就是定义一个路由并将该路由关联到控制器类上的特定方法。

A pseudo-code like this:像这样的伪代码:

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

On Flask I would have them as separated functions.在 Flask 上,我会将它们作为单独的功能。 Something like:就像是:

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

So googling a bit, there are class-based views but as I saw it, insted of defining a function I define a class and put the content of the old view function inside dispatch_request class-based view's method.所以谷歌搜索一下,有基于类的视图,但正如我所看到的,在定义一个函数的过程中,我定义了一个类,并将旧视图函数的内容放在dispatch_request基于类的视图方法中。

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

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

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

Is there a way to have these functions inside a single class?有没有办法将这些函数放在一个类中? am I misunderstading Flask's class-based views?我是不是误解了 Flask 的基于类的视图? I know there's a MethodView class that has get, post, put, delete methods but as I'm not createing a RESTful API neither I use nice-RESTful urls, MethodView class seems not to be useful for my case.我知道有一个 MethodView 类具有 get、post、put、delete 方法,但由于我没有创建 RESTful API,也没有使用漂亮的 RESTful url,MethodView 类似乎对我的情况没有用。

Thanks in advance.提前致谢。

Based on my laravel/flask project experience, the classy code of controller/view are same.根据我的 laravel/flask 项目经验,控制器/视图的经典代码是相同的。 You can try flask-classy extension您可以尝试flask-classy扩展

Below is an example based on flask-classy .下面是一个基于flask-classy的例子。

Directory目录

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

myView.py我的视图.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索引.py

from flask import Flask
from views.myView import myView

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

Run

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM