应用设置¶
Flask 应用是 Flask
类的实例。关于这个应用的一切,比如配置和 URL,都会使用这个类注册。
创建一个 Flask 应用最直接的方式是直接在你的代码顶部创建一个全局的 Flask
实例,就像上一页的“Hello, World!”示例做的那样。虽然这在某些情况下很简单也很有用,但它在项目变大时会带来一些棘手的问题。
与其全局创建一个 Flask
类实例,不如在一个函数里创建它。这个函数被称为 应用工厂。应用所需要的任何配置、注册和其他设置都将在这个函数里进行,然后应用会被返回。
应用工厂¶
是时候开始写代码了!创建 flaskr
目录并添加 __init__.py
文件。__init__.py
有两个作用:它将包含应用工厂,而且告诉 Python,flaskr
目录应该被看做一个包。
$ mkdir flaskr
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 为实例文件夹选择的路径。你会在下一节了解到更多关于数据库的内容。
如果实例文件夹里存在
config.py
文件,app.config.from_pyfile()
会使用从这个文件中获取到的值来覆写默认配置。例如,当部署时,这可以被用来设置一个真正的SECRET_KEY
配置值。test_config
也可以传递给工厂函数,这时传入的测试配置会被使用,而不是实例文件夹内的配置。这样可以让你在稍后的教程中会编写的测试被独立配置,以区别于任何开发时使用的值。
os.makedirs()
确保app.instance_path
指向的路径存在。Flask 不会自动创建实例文件夹,但它需要被创建,因为你的项目将在那里创建 SQLite 数据库文件。@app.route()
创建了一个简单的路由,这样在开始下面的教程之前你可以看到应用能够正常工作。它在 URL/hello
和一个函数之间创建了一个连接,这个函数会返回一个响应,在这里即'Hello, World!'
字符串。
运行应用¶
现在你可以用 flask
命令运行应用。在终端里告诉 Flask 要去哪里找到你的应用,然后以开发模式运行它。请记住,你应该仍然在顶层的 flask-tutorial
目录下,而不是 flaskr
包内。
在开发模式下,每当页面抛出一个异常时,就会显示一个交互式的调试器(debugger);每当你对代码进行修改,就会重启服务器。在接下来的教程中,你可以让它保持运行,只需要重载浏览器页面。
$ export FLASK_APP=flaskr
$ export FLASK_ENV=development
$ flask run
$ set -x FLASK_APP flaskr
$ set -x FLASK_ENV development
$ flask run
> set FLASK_APP=flaskr
> set FLASK_ENV=development
> flask run
> $env:FLASK_APP = "flaskr"
> $env:FLASK_ENV = "development"
> flask run
你会看到类似下面的输出:
* 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 应用!
If another program is already using port 5000, you’ll see
OSError: [Errno 98]
or OSError: [WinError 10013]
when the
server tries to start. See Address already in use for how to
handle that.
继续阅读 定义并访问数据库。