Flask 是一个轻量级的 Web 应用框架, 使用 Python 编写。
基于 Werkzeug WSGI 工具箱和 Jinja2 模板引擎。使用 BSD 授权。
Flask 也被称为 microframework ,因为它使用简单的核心,用 extension 增加其它功能。
Flask 没有默认使用的数据库、窗体验证工具。
然而,Flask 保留了扩增的弹性,可以用 Flask-extension 加入这些功能:ORM、窗体验证工具、文件上传、各种开放式身份验证技术。
当安装 Flask 时,以下组件也会自动安装:
推荐使用 Python3 的最新版。
Flask 支持 Python3.4 及其以上的版本、Python2.7 和 PyPy 。
也许 virtualenv 是你在开发中最愿意使用的,如果你在生产机器上有 shell 权限的时候,也会愿意用上 virtualenv。
virtualenv 解决了什么问题?
如果你像我一样喜欢 Python 的话,有很多机会在基于 Flask 的 Web 应用外的其它项目上使用 Python。 然而项目越多,越有可能在不同版本的 Python,或者至少在不同 Python 库的版本上工作。
我们需要面对这样的事实:库破坏向后兼容性的情况相当常见,而且零依赖的正式应用也不大可能存在。如此,当你的项目中的两个或更多出现依赖性冲突,你会怎么做?
virtualenv 的出现解决这一切!virtualenv 能够允许多个不同版本的 Python 安装,每一个服务于各自的项目。它实际上并没有安装独立的 Python 副本,只是提供了一种方式使得环境保持独立。让我们见识下 virtualenv 怎么工作的。
创建隔离的虚拟环境的第三方库有很多种,virtualenv用户体验最好也是用户量最大的一个.
在 Windows 、macOS 或 Linux 操作系统中,安装 Python 解释器时会自动安装包管理工具 pip 。所以通常而言,使用如下命令即可很容易地安装 virtualenv 库:
sudo pip3 install virtualenv
我们可以执行如下命令升级 pip 和 virtualenv 到最新版:
sudo pip3 install -U pip virtualenv
执行如下命令可以查看 virtualenv 的版本:
pip3 freeze | grep virtualenv
如上图所示,我们已经安装了 virtualenv 目前最新版本 20.10.0
创建以python3为基础解释器的virtualenv的虚拟环境,并存储到venv文件夹下
virtualenv -p python3 venv
我们先看虚拟环境下目录三层的基础结构
激活虚拟环境
source venv/bin/activate
进入虚拟环境后,命令行提示符前面会有 (venv)
字样,它就是虚拟环境的名字。
在虚拟环境内部,会复刻我们系统的python,参考版本,pip 就是其包管理工具。
pip install flask
在虚拟环境下就可以看到我们的flask包了,包括之前说说的jinja2等
一个最小的应用看起来像这样,在当前目录下新建 hello.py
文件
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello_world():
return 'Hello, World!'
那么这段代码做了什么?
首先我们导入了类 Flask。这个类的实例化将会是我们的 WSGI 应用。
接着,我们创建一个该类的实例。
第一个参数是应用模块或包的名称,这样 Flask 才会知道去哪里寻找模板、静态文件等等。
如果你使用的是单一的模块(就如本例),第一个参数应该使用 __name__
。
我们使用装饰器 route()
告诉 Flask 哪个 URL
才能触发我们的函数。
即路由
定义一个函数,该函数名也是用来给特定函数生成 URLs,并且返回我们想要显示在用户浏览器上的信息。
使用 Python 解释器运行这个文件,注意这个文件不能取名为
flask.py
,因为这会与 Flask 本身冲突。
运行这个应用既可以使用 flask 命令也可以使用 Python 的 -m
调用 flask,在运行之前你需要设置 FLASK_APP
的环境变量来告诉终端需要运行哪个应用.
export FLASK_APP=hello.py
flask run
也可以使用如下命令启动应用:
export FLASK_APP=hello.py
python3 -m flask run
用于测试已经足够了,但可能你并不想用于生产环境。更多配置可以参考开发者选项。
我们也可以自定义运行的host和端口
export FLASK_APP=hello.py
flask run -h 0.0.0.0 -p 8080
使用 flask 命令行可以非常方便的启动一个本地开发服务器,但是每次修改代码后你都需要手动重启服务器。
通过前面的启动后输出显示可以发现 Environment
为 production
,同时调试模式未开启 Debug mode: off
.
如果启用了调试支持,在代码修改后服务器能够自动重载,并且如果发生错误,它会提供一个有用的调试器。
为了让所有的开发者特征可用(包括调试模式),在运行服务器之前可以设置 FLASK_ENV
环境变量为 development
:
export FLASK_ENV=development
export FLASK_DEBUG=1
flask run -h 0.0.0.0 -p 8080
上述命令做了以下几件事: