应用程序设置

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 包中。

调试模式会在页面引发异常时显示一个交互式调试器,并在您对代码进行更改时重新启动服务器。您可以在按照本教程进行操作时让它保持运行状态,只需重新加载浏览器页面即可。

$ flask --app flaskr run --debug

您将看到类似于以下内容的输出

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

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

如果另一个程序已经在使用端口 5000,您会在服务器尝试启动时看到 OSError: [Errno 98]OSError: [WinError 10013]。有关如何处理此问题,请参阅 地址已在使用中

继续 定义和访问数据库