如果你好奇 Flask 为什么用它的方式做事情,而不是别的方法,那么这节是为你准 备的。这节应该给你一些设计决策的想法,也许起初是武断且令人惊讶的,特别是 直接与其它框架相比较。 显式的应用对象一个基于 WSGI 的 Python web 应用必须有一个中央的可调用对象来实现实际的应 用。在 Flask 中,这是一个 当不是像下面的代码这样使用一个显式的应用对象时: from flask import Flask
app = Flask(__name__)
@app.route('/')
def index():
return 'Hello World!'
看起来会是这样: from hypothetical_flask import route
@route('/')
def index():
return 'Hello World!'
这样做有三个主要的原因。最重要的一个是,显式的应用对象需要在同一时刻只存在 一个实例。有许多方法来用单个应用对象来仿造多个应用,像维护一个应用的栈一样, 但这会导致一些问题,这里不会赘述。现在问题是:什么时候一个微框架在同一时刻需 要至少一个应用?一个很好的例子是单元测试。当你想要测试什么的时候,创建一个 最小化的应用来测试特定的行为非常有用。当应用对象删除时,它分配的一切都会被 再次释放。 当你的代码中有一个显式的对象时,继承基类( 此外, Flask 依赖于一个那个类的显式实例还有一个非常重要的原因是:包名称。无 论何时你创建一个 Flask 实例,你通常传给它 __name__ 作为包名。 Flask 依赖 这个信息来正确地加载相对于你模块的资源。在 Python 对反射的杰出支持下,它可 以访问包来找出模板和静态文件存储在哪(见 第三个原因是“显明胜于隐含”。那个对象是你的 WSGI 应用,你不需要记住别的东西。 如果你想要应用一个 WSGI 中间件,只需要封装它(虽然有更好的方式来这么做来不 丢失应用对象的引用 此外,这个设计使得用工厂函数来创建应用成为可能,这对单元测试和类似的东西 ( 应用程序的工厂函数 )十分有用。 |
Archiver|手机版|笨鸟自学网 ( 粤ICP备20019910号 )
GMT+8, 2024-11-9 22:18 , Processed in 0.023316 second(s), 17 queries .