Flask 介绍
Flask 是一个轻量级的 Web 应用框架, 使用 Python 编写。
基于 Werkzeug WSGI 工具箱和 Jinja2 模板引擎。使用 BSD 授权。
Flask 也被称为 microframework ,因为它使用简单的核心,用 extension 增加其它功能。
Flask 没有默认使用的数据库、窗体验证工具。
然而,Flask 保留了扩增的弹性,可以用 Flask-extension 加入这些功能:ORM、窗体验证工具、文件上传、各种开放式身份验证技术。
当安装 Flask 时,以下组件也会自动安装:
- Werkzeug: WSGI(web 服务器网关接口)工具,是介于应用和服务器之间标准的接口工具。
- Jinja: web 前端页面中使用的模板语言。
- MarkupSafe: 与 Jinja 配合使用,当表单页面跳转时会进行验证从而避免遭遇不信任的输入带来的攻击。
- ItsDangerous: 安全地注入数据以确保数据的完整性,通常用于保护 Flask 的 session cookie。
- Click: 一个解析命令行的应用,它支持在 Flask 中自定义管理命令。
推荐使用 Python3 的最新版。
Flask 支持 Python3.4 及其以上的版本、Python2.7 和 PyPy 。
虚拟环境
virtualenv介绍
也许 virtualenv 是你在开发中最愿意使用的,如果你在生产机器上有 shell 权限的时候,也会愿意用上 virtualenv。
virtualenv 解决了什么问题?
如果你像我一样喜欢 Python 的话,有很多机会在基于 Flask 的 Web 应用外的其它项目上使用 Python。 然而项目越多,越有可能在不同版本的 Python,或者至少在不同 Python 库的版本上工作。
我们需要面对这样的事实:库破坏向后兼容性的情况相当常见,而且零依赖的正式应用也不大可能存在。如此,当你的项目中的两个或更多出现依赖性冲突,你会怎么做?
virtualenv 的出现解决这一切!virtualenv 能够允许多个不同版本的 Python 安装,每一个服务于各自的项目。它实际上并没有安装独立的 Python 副本,只是提供了一种方式使得环境保持独立。让我们见识下 virtualenv 怎么工作的。
安装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 就是其包管理工具。
安装 Flask
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
上述命令做了以下几件事:
- 使调试器(debugger)可用
- 启动了代码改变自动的热加载
- 在 flask 应用中开启了 debug 模式