应用配置与启动

一个Flask应用就是Flask类的实例,应用中的所有配置、URL映射等等内容都必须在这个实例中注册。建立Flask类实例最简单直接的办法就是建立一个全局实例,就像是前面的最小Flask应用一般。但是这种创建方式并不推荐使用。

推荐的应用建立的方式是在一个函数中创建Flask的实例,这个函数被称为应用工厂(application factory)。所有的配置、注册工作都在这个函数中完成,函数最后返回Flask实例完成工作。

以下示例给出了一个示范性的应用工厂。

import os
from flask import Flask


def create_app(test_config=None):
	# 建立Flask实例
	app = Flask(__name__, instance_relative_config=True)
	# 设定应用将要使用的默认配置
	app.config.from_mapping(
		# SECRET_KEY用于对Flask及其扩展对数据进行加密保护
		SECRET_KEY='dev',
		DATABASE=os.path.join(app.instance_path, 'flaskr.sqlite'),
	)

	if test_config is None:
		# 从config.py中读取配置覆盖默认设置
		app.config.from_pyfile('config.py', silent=True)
	else:
		# load the test config if passed in
		app.config.from_mapping(test_config)

	# 此处用于保证前面声明的数据库所在路径存在
	try:
		os.makedirs(app.instance_path)
	except OSError:
		pass

	# 最简单的路由声明
	@app.route('/hello')
	def hello():
		return 'Hello, World!'

	return app

Flask提供了flask命令来运行应用,但是请注意,这个命令应该只用于调试。flask命令依赖于两个环境变量来运行,一是FLASK_APP,用于指定项目主程序所在包,二是FLASK_ENV指定运行环境。在指定两个环境变量之后,执行flask run来启动应用。

对于Linux系统,可以执行以下指令:

export FLASK_APP=project-package
export FLASK_ENV=development
flask run

对于Windows系统,在命令行cmd.exe中,可以使用set替代export

set FLASK_APP=project-package
set FLASK_ENV=development
flask run

在PowerShell中,则需要使用$env:来代替export

$env:FLASK_APP=project-package
$env:FLASK_ENV=development
flask run

flask run默认监听127.0.0.1的地址,可以使用--host参数来改变监听。Flask的监听服务默认运行在5000端口上。指定FLASK_ENV为development可以启动调试模式,此时Flask会使用友好方式列出程序错误所在。