flask 项目配置
静态文件配置
一个完整的⽹站当然不能只返回用户一句 Hello World !
,我们需要模板(template)和静态文件(static file)来生成更加丰富的⽹页。
模板 即包含程序页面的 HTML 文件,静态文件 则是需要在 HTML 文件中加载的 CSS 和 JavaScript 文件,以及图⽚、字体文件等资源文件。
默认情况下,模板文件存放在项目根目录中的 templates 文件夹中,静态文件存放在 static 文 件夹下,这两个文件夹需要和包含程序实例的模块处于同一个目录下,对应的项目结构示例如下所示:
application/
- templates/
- static/
- app.py
初始化参数
Flask 程序实例在创建的时候,需要默认传入当前 Flask 程序所指定的包(模块),接下来就来详细查看一下 Flask 应用程序在创建的时候一些需要我们关注的参数:
import_name
- Flask 程序所在的包(模块),传
__name__
就可以 - 其可以决定 Flask 在访问静态文件时查找的路径
- Flask 程序所在的包(模块),传
static_folder
- 静态文件存储的文件夹,可以不传,默认为
static
- 静态文件存储的文件夹,可以不传,默认为
template_folder
- 模板文件存储的文件夹,可以不传,默认为
templates
- 模板文件存储的文件夹,可以不传,默认为
# 初始化 Flask 应用程序,并指定当前程序所处于的包名
from flask import current_app, Flask, render_template
app = Flask(
__name__,
static_folder='static', # 静态文件所在的文件夹名,默认为 static
template_folder='templates', # 模板文件所在的文件夹名,默认为 templates
)
配置文件加载
在 Flask 程序运行的时候,可以给 Flask 设置相关配置,比如:配置数据库连接地址等等,设置 Flask 配置有以下四种方式:
1、从配置对象中加载(常用)
app.config.form_object()
2、从配置文件中加载
app.config.form_pyfile()
3、从环境变量中加载(了解)
app.config.from_envvar()
下面演示如何从对象中加载配置文件
class TestConfig:
SECRET_KEY = "测试秘钥"
# app.secret_key = '使用app对象进行配置秘钥'
# app.config['SECRET_KEY'] = '使用配置文件进行配置秘钥'
# app.config.from_object(TestConfig)
app.config.from_pyfile('config.py')
自定义 flask 命令
除了 Flask 内置的 flask run 等命令,我们也可以自定义命令。在虚拟环境安装 Flask 后,包含许多内置命令的 flask 脚本就可以使用了。在前面我们 已经接触了很多 flask 命令,比如运行服务器的 flask run,启动 shell 的 flask shell。
通过创建任意一个函数,并为其添加 app.cli.command() 装饰器,我们就可以注册一个 flask 命令。下方代码创建了一个自定义的 hello() 命令函数,在函数中我们仍然只是打印一行问候。
创建自定义命令
import click
@app.cli.command()
def hello():
click.echo('Hello, flask!')
函数的名称即为命令名称,这里注册的命令即 hello ,你可以使用 flask hello 命令来触发函数。作为替代,你也可以在 app.cli.command()
装饰器 中传入参数来设置命令名称,比如 app.cli.command('say-hello')
会把命令 名称设置为 say-hello, 完整的命令即 flask say-hello 。
借助 click 模块的 echo() 函数,我们可以在命令行界面输出字符。 命令函数的文档字符串则会作为帮助信息显示(flask hello --help)。 在命令 行下执行 flask hello 命令就会触发这个 hello() 函数:
$ flask hello
Hello, flask!
在命令下执行 flask --help
可以查看 Flask 提供的命令帮助文档,我们自定义的 hello 命令也会出现在输出的命令列表中,如下所示:
$ flask
Usage: flask [OPTIONS] COMMAND [ARGS]...
A general utility script for Flask applications.
Provides commands from Flask, extensions, and the application. Loads the
application defined in the FLASK_APP environment variable, or from a
wsgi.py file. Setting the FLASK_ENV environment variable to 'development'
will enable debug mode.
> set FLASK_APP=hello.py
> set FLASK_ENV=development
> flask run
Options:
--version Show the flask version
--help Show this message and exit.
Commands:
hello 自己定义的指令
routes Show the routes for the app.
run Runs a development server.
shell Runs a shell in the app context.
关于自定义命令更多的设置和功能请参考 Click 的官方文档 :https://click.palletsprojects.com/en/6.x/
拓展 @Flask 与 MVC 架构
MVC 架构最初是用来设计桌面程序的,后来也被用于 Web 程序,应用 了这种架构的 Web 框架有 Django、Ruby on Rails 等。
在 MVC 架构中,程序被分为三个组件:数据处理(Model)、用户界面(View)、交互逻辑 (Controller)。 严格来说,Flask 并不是 MVC 架构的框架,因为它没有内置数据模型⽀持。为了方便表述,在教程中使用app.route()
装饰器的函数仍被称为视图函数, 同时会使用 <函数名>-视图
(比如 index 视图)的形式来代指某个视图函数。
如果想要使用 Flask 来编写一个 MVC 架构的程序,那么视图函数可以作为控制器(Controller),视图(View)则是将要学习的使用 Jinja2 渲染的 HTML 模板,而模型(Model)可以使用其他库来实现,用 SQLAlchemy 来创建数据库模型。