暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Flask 用户指南 - 教程(2)- 应用程序设置

数据库杂货铺 2022-02-14
1378

应用程序设置

 

Flask 应用程序是 Flask 类的一个实例。有关应用程序的一切,例如配置和 URL,都将注册到此类。

 

创建 Flask 应用程序最简单的方法是直接在代码顶部创建一个全局 Flask 实例,类似于之前“HelloWorld!”示例所示一样。虽然这在某些情况下简单且有用,但随着项目的发展,它可能会导致一些棘手的问题。

 

可以在函数中,而不是在全局创建 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 包之外,可以保存不应提交到版本控制的本地数据,例如配置 secrets 和数据库文件。

 

2. app.config.from_mapping() 设置应用程序使用的一些默认配置:

 

 Flask 和扩展使用 SECRET_KEY 来确保数据安全,它被设置为 'dev',以便在开发过程中使用,但在部署时应该用一个随机值覆盖它。

 

 DATABASE 保存 SQLite 数据库文件的路径。它位于 app.instance_path,这是 Flask 实例文件夹的路径。

 

3. 如果实例文件夹中存在 config.py 文件,app.config.from_pyfile() 使用从配置中获取的值覆盖默认配置。例如,在部署时,这样就可以用来设置真正的 SECRET_KEY

 

 test_config 值也可以传递到工厂,用于代替实例配置。这就是在本教程后面要编写的测试,可以独立于配置的任何开发值。

 

4. os.makedirs() 确保 app.instance_path 存在。Flask 不会自动创建实例文件夹,但此项目需要有此文件夹,因为此项目将在那里创建 SQLite 数据库文件。

 

5. @app.route() 创建一个简单的路由,这样在进入本教程的其余部分之前,就可以看到应用程序正在工作。它在 URL /hello 和一个函数之间创建了一个连接,此函数返回响应字符串 'Hello, World!'

 

运行应用程序

 

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

 

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

 

> set FLASK_APP=flaskr
> set FLASK_ENV=development
> flask run

 

将看到类似如下的输出:

 

 * Serving Flask app 'flaskr' (lazy loading)

 * Environment: development

 * Debug mode: on

 * Restarting with stat

 * Debugger is active!

 * Debugger PIN: 107-107-918

 

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

 

如果其他程序已经在使用端口 5000,当服务器尝试启动时,将看到 OSError: [Errno 98] OSError: [WinError 10013]

 

 

 

 

原文:

https://flask.palletsprojects.com/en/2.0.x/tutorial/factory/


文章转载自数据库杂货铺,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论