1 简介

Flask诞生于2010年,是其作者Armin Ronacher的一个愚人节玩笑。Flask是一个使用 Python 编写的轻量级 Web 应用框架。其 WSGI 工具箱采用 Werkzeug ,模板引擎则使用 Jinja2 。Flask使用 BSD 授权。Flask也被称为 『微框架(Micro-Framework)』,因为它使用简单的核心,用 extension 增加其他功能。Flask没有默认使用的数据库、窗体验证工具。主要面向需求简单,项目周期短的小应用。

2 组件

2.1 内置组件

安装 Flask 时,以下配套软件会被自动安装。

  • Werkzeug 用于实现 WSGI (Web Service Gateway Interface) Web服务器网关接口,是应用和服务之间的标准 Python 接口。
  • Jinja 用于渲染页面的模板语言。
  • MarkupSafe 与 Jinja 共用,在渲染页面时用于避免不可信的输入,防止注入攻击。
  • ItsDangerous 保证数据完整性的安全标志数据,用于保护 Flask 的 session cookie.
  • Click 是一个命令行应用的框架。用于提供 flask 命令,并允许添加自定义 管理命令。

2.2 可选套件

以下配套软件不会被自动安装。如果安装了,那么 Flask 会检测到这些软件。

  • Blinker 为 信号 提供支持。
  • SimpleJSON 是一个快速的 JSON 实现,兼容 Python’s json 模块。如果安装 了这个软件,那么会优先使用这个软件来进行 JSON 操作。
  • python-dotenv 当运行 flask 命令时为 通过 dotenv 设置环境变量 提供支持。
  • Watchdog 为开发服务器提供快速高效的重载。

3 安装

3.1 Python

推荐使用最新版本的 Python 3.x,可参考本文

3.2 虚拟环境virtualenv

为什么要使用虚拟环境?随着你的 Python 项目越来越多,你会发现不同的项目会需要不同的版本的 Python 库。同一个 Python 库的不同版本可能不兼容。而虚拟环境虽然并没有安装独立的 Python 副本,但是它提供了一种巧妙的方式来来让各项目环境保持独立。这样就可以隔离不同项目之间的 Python 库,也可以隔离项目与操作系统之间的 Python 库。建议在开发环境和生产环境下都使用虚拟环境来管理项目的依赖。

安装命令

sudo easy_install virtualenv

sudo pip3 install virtualenv

sudo apt-get install python-virtualenv # Ubuntu

3.2.1 创建虚拟环境

mkdir projectTest
cd projectTest
python3 -m venv venv

此时,可以看到 projectTest 目录下多了一个 venv 目录,其内部的结构如下:

./
├── bin
│   ├── Activate.ps1
│   ├── activate
│   ├── activate.csh
│   ├── activate.fish
│   ├── easy_install
│   ├── easy_install-3.8
│   ├── flask
│   ├── pip
│   ├── pip3
│   ├── pip3.8
│   ├── python -> python3
│   └── python3 -> /usr/local/bin/python3
├── include
├── lib
│   └── python3.8
└── pyvenv.cfg

3.2.2 激活虚拟环境

在 projectTest 目录中,执行命令

. venv/bin/activate

激活后,你的终端提示符会显示虚拟环境的名称。

(venv) appledeMacBook-Pro:projectTest c80k2$

3.3 安装Flask

sudo pip3 install Flask

输出

pip3 install Flask
Collecting Flask
  Downloading Flask-1.1.2-py2.py3-none-any.whl (94 kB)
     |████████████████████████████████| 94 kB 1.7 MB/s
Collecting Jinja2>=2.10.1
  Downloading Jinja2-2.11.3-py2.py3-none-any.whl (125 kB)
     |████████████████████████████████| 125 kB 5.6 MB/s
Collecting itsdangerous>=0.24
  Downloading itsdangerous-1.1.0-py2.py3-none-any.whl (16 kB)
Collecting click>=5.1
  Downloading click-7.1.2-py2.py3-none-any.whl (82 kB)
     |████████████████████████████████| 82 kB 2.1 MB/s
Collecting Werkzeug>=0.15
  Downloading Werkzeug-1.0.1-py2.py3-none-any.whl (298 kB)
     |████████████████████████████████| 298 kB 2.6 MB/s
Collecting MarkupSafe>=0.23
  Downloading MarkupSafe-1.1.1-cp38-cp38-macosx_10_9_x86_64.whl (16 kB)
Installing collected packages: MarkupSafe, Jinja2, itsdangerous, click, Werkzeug, Flask
Successfully installed Flask-1.1.2 Jinja2-2.11.3 MarkupSafe-1.1.1 Werkzeug-1.0.1 click-7.1.2 itsdangerous-1.1.0
WARNING: You are using pip version 20.1.1; however, version 21.0.1 is available.
You should consider upgrading via the '/Users/yiyunjie/Desktop/flaskTest/venv/bin/python3 -m pip install --upgrade pip' command.

4 入门

4.1 创建python文件

在projectTest目录中创建一个python文件,例如 hello.py (注意不要使用 flask.py 作为应用名称,这会与 Flask 本身发生冲突)。

写入内容:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

from flask import Flask
app = Flask(__name__)

@app.route('/')
def hello_world():
    return 'Hello World!'

if __name__ == '__main__':
    app.run()
   #app.run(host='0.0.0.0', port=8080, DEBUG=Ture)

我们来分别解释一下:

  • 第一行导入了Flask类,以便创建一个Flask类的实例;
  • 第二行创建了一个Flask类的实例。这是一个WSGI应用实例。WSGI (Web Service Gateway Interface) 就是 Web服务器网关接口,同时也是架设web项目的Python标准。它的一个参数是应用模块或者包的名称,如果你使用 一个单一模块(就像本例),那么应当使用 __name__ ,让Flask在当前模块内寻找模板和静态文件等资源;
  • 第三行使用 route() 装饰器来告诉 Flask 触发函数的 URL;
  • 最后用 run() 函数来让应用运行在本地服务器上。 其中 if __name__ == '__main__': 确保服务器只会在该脚本被 Python 解释器直接执行的时候才会运行,而不是作为模块导入的时候。
  • 注意最后一行被注释的部分,这里可以填写当前应用所运行的host和port,以及是否为Debug状态。默认是 127.0.0.1:5050,如果是 0.0.0.0 则表示监听所有IP过来的请求。

4.2 执行

执行

export FLASK_ENV=development # 打开所有开发功能,开启调试模式,激活自动重载,可不使用

export FLASK_APP=hello.py

flask run

flask run --host=0.0.0.0 --port=8080 --debug=true

输出

 * Serving Flask app "hello.py"
 * Environment: production
   WARNING: This is a development server. Do not use it in a production deployment.
   Use a production WSGI server instead.
 * Debug mode: off
 * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)

此时,Flask应用就运行在 127.0.0.1:5000 上面

我们在本机的浏览器上,输入地址,回车,就出现代码所返回的 Hello World! 了

1 简介-LMLPHP

而命令行中,也出现以下记录:

127.0.0.1 - - [12/Mar/2021 20:53:11] "GET / HTTP/1.1" 200 -
04-16 22:47