应用程序设置 — Flask 文档

来自菜鸟教程
Flask/docs/2.0.x/tutorial/factory
跳转至:导航、​搜索

应用程序设置

Flask 应用程序是 Flask 类的一个实例。 有关应用程序的所有内容,例如配置和 URL,都将在此类中注册。

创建 Flask 应用程序最直接的方法是直接在代码顶部创建一个全局 Flask 实例,例如“Hello, World!” 上一页的例子。 虽然这在某些情况下简单且有用,但随着项目的发展,它可能会导致一些棘手的问题。

您将在函数内部创建它,而不是全局创建 Flask 实例。 此功能称为 应用程序工厂 。 应用程序需要的任何配置、注册和其他设置都将在函数内部进行,然后应用程序将被返回。

应用工厂

是时候开始编码了! 创建flaskr目录并添加__init__.py文件。 __init__.py 有双重作用:它将包含应用程序工厂,并告诉 Python 应将 flaskr 目录视为一个包。

$ mkdir flaskr

flaskr/__init__.py

import os

from flask import Flask


def create_app(test_config=None):
    # create and configure the app
    app = Flask(__name__, instance_relative_config=True)
    app.config.from_mapping(
        SECRET_KEY='dev',
        DATABASE=os.path.join(app.instance_path, 'flaskr.sqlite'),
    )

    if test_config is None:
        # load the instance config, if it exists, when not testing
        app.config.from_pyfile('config.py', silent=True)
    else:
        # load the test config if passed in
        app.config.from_mapping(test_config)

    # ensure the instance folder exists
    try:
        os.makedirs(app.instance_path)
    except OSError:
        pass

    # a simple page that says hello
    @app.route('/hello')
    def hello():
        return 'Hello, World!'

    return app

create_app 是应用工厂函数。 您将在本教程的后面添加它,但它已经做了很多。

  1. app = Flask(__name__, instance_relative_config=True) 创建 Flask 实例。
    • __name__ 是当前 Python 模块的名称。 应用程序需要知道它所在的位置来设置一些路径,而 __name__ 是一种方便的方式来告诉它。
    • instance_relative_config=True 告诉应用程序配置文件是相对于 实例文件夹 。 实例文件夹位于 flaskr 包之外,可以保存不应提交给版本控制的本地数据,例如配置机密和数据库文件。
  2. app.config.from_mapping() 设置应用程序将使用的一些默认配置:
    • SECRET_KEY 被 Flask 和扩展使用来保证数据安全。 它被设置为 'dev' 以在开发过程中提供一个方便的值,但在部署时应该用一个随机值覆盖它。
    • DATABASE 是保存 SQLite 数据库文件的路径。 它在 app.instance_path 下,这是 Flask 为实例文件夹选择的路径。 您将在下一节中了解有关数据库的更多信息。
  3. app.config.from_pyfile() 使用从实例文件夹中的 config.py 文件(如果存在)中获取的值覆盖默认配置。 比如在部署的时候,这个可以用来设置一个真正的SECRET_KEY
    • test_config 也可以传给工厂,代替实例配置使用。 这样,您将在本教程后面编写的测试可以独立于您配置的任何开发值进行配置。
  4. os.makedirs() 确保 app.instance_path 存在。 Flask 不会自动创建实例文件夹,但需要创建它,因为您的项目将在那里创建 SQLite 数据库文件。
  5. @app.route() 创建了一个简单的路由,因此您可以在进入本教程的其余部分之前查看应用程序的运行情况。 它在 URL /hello 和返回响应的函数之间创建连接,在本例中为字符串 'Hello, World!'


运行应用程序

现在您可以使用 flask 命令运行您的应用程序。 从终端告诉 Flask 在哪里可以找到您的应用程序,然后在开发模式下运行它。 请记住,您应该仍然在顶级 flask-tutorial 目录中,而不是在 flaskr 包中。

开发模式在页面引发异常时显示交互式调试器,并在您更改代码时重新启动服务器。 您可以让它继续运行,然后按照教程重新加载浏览器页面。

你会看到类似这样的输出:

* Serving Flask app "flaskr"
* Environment: development
* Debug mode: on
* Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
* Restarting with stat
* Debugger is active!
* Debugger PIN: 855-212-761

在浏览器中访问 http://127.0.0.1:5000/hello,您应该会看到“Hello, World!” 信息。 恭喜,您现在正在运行 Flask Web 应用程序!

如果另一个程序已经在使用端口 5000,当服务器尝试启动时,您将看到 OSError: [Errno 98]OSError: [WinError 10013]。 请参阅 Address already in use 了解如何处理。

继续定义和访问数据库