应用设置¶
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
是应用工厂函数。您将在本教程的后面部分添加它,但它已经做了很多事情。
app = Flask(__name__, instance_relative_config=True)
创建Flask
实例。__name__
是当前 Python 模块的名称。应用需要知道它的位置才能设置一些路径,而__name__
是一种告诉它的便捷方法。instance_relative_config=True
告诉应用配置文件相对于实例文件夹。实例文件夹位于flaskr
包之外,可以保存不应提交到版本控制的本地数据,例如配置密钥和数据库文件。
app.config.from_mapping()
设置应用将使用的一些默认配置SECRET_KEY
由 Flask 和扩展程序用于保护数据安全。它设置为'dev'
以在开发期间提供方便的值,但在部署时应使用随机值覆盖它。DATABASE
是 SQLite 数据库文件将保存的路径。它位于app.instance_path
下,这是 Flask 为实例文件夹选择的路径。您将在下一节中了解有关数据库的更多信息。
app.config.from_pyfile()
使用实例文件夹中config.py
文件中的值覆盖默认配置(如果存在)。例如,在部署时,这可以用于设置真实的SECRET_KEY
。test_config
也可以传递给工厂,并将代替实例配置使用。这是为了让您稍后在本教程中编写的测试可以独立于您配置的任何开发值进行配置。
os.makedirs()
确保app.instance_path
存在。Flask 不会自动创建实例文件夹,但需要创建它,因为您的项目将在那里创建 SQLite 数据库文件。@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]
。请参阅 地址已在使用,了解如何处理该问题。
继续学习 定义和访问数据库。