跳转到主要内容

Flask的基于类的视图

项目描述

注意

This is a fork of original `Flask-Classy` for continuing its development since the original
project was not updated for a long time. For more information, see:
https://github.com/apiguy/flask-classy/issues/80

Flask-Classful是一个扩展,它为Flask添加了基于类的视图。但为什么?

我喜欢Flask。非常喜爱。但有时项目会变得有点大,我需要一种方式来管理和组织所有的不同部分。我知道你在说什么:“但是蓝图呢?”

你说得对。蓝图相当不错。但我发现它们并不总是足以封装我需要的特定上下文。我想要的,不,我需要的是能够将我的视图分组到相关的类中,每个类都有自己的上下文和行为。这也使得测试变得非常方便。

“好吧,我明白了。但我不能只使用flask.views中的基类来实现这一点吗?”

嗯,是的,也不是。虽然flask.views.MethodView确实提供了flask_classful.FlaskView的一些功能,但它并没有通过支持不属于给定资源典型CRUD操作的方法,或者使我能够轻松地覆盖特定视图的路由规则来完整地展现这一点。而flask.views.View确实添加了一些上下文,但它需要为每个视图创建一个类,而不是让我能够将相同资源的非常相似的视图组合成一个类。

“但是我的项目并不大。Flask-Classful除了使大型项目更容易管理之外,还能为我做些什么?”

当然,它在其他一些事情上也有帮助。

例如,Flask-Classful会根据你的视图中的方法自动生成路由,并使用Flask熟悉的装饰器语法使覆盖这些路由变得非常简单。

安装

使用以下命令安装最新扩展:

$ pip install flask-classful

让我们看看它是如何工作的

如果你像我一样,当你看到某物在使用时,你可能会对如何使用它有一个更好的理解。让我们创建一个简单的应用来看看Flask-Classful是如何工作的。

from flask import Flask
from flask_classful import FlaskView

# we'll make a list to hold some quotes for our app
quotes = [
    "A noble spirit embiggens the smallest man! ~ Jebediah Springfield",
    "If there is a way to do it better... find it. ~ Thomas Edison",
    "No one knows what he can do till he tries. ~ Publilius Syrus"
]

app = Flask(__name__)

class QuotesView(FlaskView):
    def index(self):
        return "<br>".join(quotes)

QuotesView.register(app)

if __name__ == '__main__':
    app.run()

运行此应用,并在您的网页浏览器中打开: http://localhost:5000/quotes/

正如你所看到的,它返回了引言列表。但如果我们只想得到一个引言呢?那时我们该怎么做呢?

class QuotesView(FlaskView):
    def index(self):
        ...

    def get(self, id):
        id = int(id)
        if id < len(quotes):
            return quotes[id]
        else:
            return "Not Found", 404

现在将浏览器指向: http://localhost:5000/quotes/1/,你应该会看到来自尊敬的艾迪生先生的非常深刻的引言。

这很酷,但是如果我们只想得到一个随机的引言呢?那时我们该怎么做?让我们给我们的FlaskView添加一个随机视图。

from random import choice
class QuotesView(FlaskView):
    def index(self):
        ...

    def get(self, id):
        ...

    def random(self):
        return choice(quotes)

将浏览器指向: http://localhost:5000/quotes/random/,每次都会返回一个随机的引言。哇!

所以到目前为止,你可能已经敏锐地意识到你还没有定义任何路由,但路由显然正在发生。“这是巫术吗?”你问?

根本不是。Flask-Classful会自动为FlaskView中任何不以下划线字符开头的函数创建路由。当然,你仍然可以定义自己的路由,我们将在下一部分看到。

项目详情


下载文件

下载适合您平台的文件。如果您不确定选择哪个,请了解更多关于 安装软件包 的信息。

源分布

flask_classful-0.16.0.tar.gz (8.8 kB 查看哈希值)

上传时间

构建分布

flask_classful-0.16.0-py3-none-any.whl (9.5 kB 查看哈希值)

上传时间 Python 3

支持者: