简介
Flask 依赖两个外部库:Werkzeug 和 Jinja2 。 Werkzeug 是一个 WSGI(在 Web 应用和多种服务器之间的标准 Python 接口) 工具集。Jinja2 负责渲染模板。
那么如何在你的电脑上安装这一切?虽说条条大道通罗马,但是最强大的方式是 virtualenv ,所以我们首先来看它。
你首先需要 Python 2.6 或更高的版本,所以请确认有一个最新的 Python 2.x 安装。 在 Python 3 中使用 Flask 请参考: Python 3 支持 。
Virtualenv
动态语言Ruby、Python都有自己的虚拟环境,虚拟环境是程序执行时的独立执行环境,在同一台服务器中可以创建不同的虚拟环境供不同的系统使用,项目之间的运行环境保持独立性而相互不受影响。例如项目可以在基于Python2的环境中运行,而项目B可以在基于Python3的环境中运行。Python通virtualenv工具管理虚拟环境。
virtualenv 解决了什么问题?如果你像我一样喜欢 Python,不仅会在采用 Flask 的Web 应用中用上 virtualenv,在别的项目中你也会想用上它。你拥有的项目越多,同时使用不同版本的 Python 工作的可能性也就越大,或者起码需要不同版本的 Python 库。悲惨现实是:常常会有库破坏向后兼容性,然而正经应用不采用外部库的可能微乎其微。当在你的项目中,出现两个或更多依赖性冲突时,你会怎么做?
virtualenv 拯救世界!virtualenv 为每个不同项目提供一份 Python 安装。它并没有真正安装多个 Python 副本,但是它确实提供了一种巧妙的方式来让各项目环境保持独立。让我们来看看 virtualenv 是怎么工作的。
安装virtualenv
- pip list
lihuandeMacBook-Pro:~ lihuan$ pip list
Package Version
------------ -------
appdirs 1.4.4
click 7.1.2
distlib 0.3.1
filelock 3.0.12
Flask 1.1.2
itsdangerous 1.1.0
Jinja2 2.11.3
MarkupSafe 1.1.1
pip 21.0.1
setuptools 41.2.0
six 1.15.0
virtualenv 20.4.2
Werkzeug 1.0.1
lihuandeMacBook-Pro:~ lihuan$ pip3 list
Package Version
------------ -------
appdirs 1.4.4
click 7.1.2
distlib 0.3.1
filelock 3.0.12
Flask 1.1.2
itsdangerous 1.1.0
Jinja2 2.11.3
MarkupSafe 1.1.1
pip 21.0.1
setuptools 41.2.0
six 1.15.0
virtualenv 20.4.2
Werkzeug 1.0.1
lihuandeMacBook-Pro:~ lihuan$
- 安装 virtualenv 之前需要先确认是否安装好 python 和 pip
lihuandeMacBook-Pro:~ lihuan$ python -V
Python 2.7.16
lihuandeMacBook-Pro:~ lihuan$ pip -V
pip 21.0.1 from /Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/pip (python 3.8)
- pip安装virtualenv
pip install virtualenv
# 或者
pip3 install virtualenv
lihuandeMacBook-Pro:~ lihuan$ virtualenv --version
virtualenv 20.4.2 from /Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/virtualenv/__init__.py
lihuandeMacBook-Pro:~ lihuan$
使用virtualenv
- 创建virtualenvs文件夹
# 创建一个文件夹用来存放各个环境的相关文件
mkdir virtualenvs
cd virtualenvs
- 创建虚拟环境
创建一个名称为 test_env 的不带任何第三方包的独立的Python运行环境
代码语言:javascript复制方法一:
virtualenv test_env
方法二:
mkdir test_env
cd test_env
virtualenv .
lihuandeMacBook-Pro:virtualenvs lihuan$ virtualenv test_env
created virtual environment CPython3.8.3.final.0-64 in 731ms
creator CPython3Posix(dest=/Users/lihuan/Documents/projects/python/master/virtualenvs/test_env, clear=False, no_vcs_ignore=False, global=False)
seeder FromAppData(download=False, pip=bundle, setuptools=bundle, wheel=bundle, via=copy, app_data_dir=/Users/lihuan/Library/Application Support/virtualenv)
added seed packages: pip==21.0.1, setuptools==52.0.0, wheel==0.36.2
activators BashActivator,CShellActivator,FishActivator,PowerShellActivator,PythonActivator,XonshActivator
- 进入虚拟环境
# 进入环境
source test_env/bin/activate
lihuandeMacBook-Pro:virtualenvs lihuan$ source test_env/bin/activate
(test_env) lihuandeMacBook-Pro:virtualenvs lihuan$
(test_env) lihuandeMacBook-Pro:virtualenvs lihuan$ python
Python 3.8.3 (v3.8.3:6f8c8320e9, May 13 2020, 16:29:34)
[Clang 6.0 (clang-600.0.57)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>>
备注:目录说明
bin,存放了当前Python运行环境的Python解释器(bin/python),以及可执行命令(例如pip,easy_install);
test_env/lib/python*.*/site-packages,安装的python库存放在这个目录下。
- 安装软件包
为环境安装软件包
代码语言:javascript复制(test_env) lihuandeMacBook-Pro:virtualenvs lihuan$ pip install requests
Collecting requests
Downloading requests-2.25.1-py2.py3-none-any.whl (61 kB)
|████████████████████████████████| 61 kB 712 kB/s
Collecting chardet<5,>=3.0.2
Downloading chardet-4.0.0-py2.py3-none-any.whl (178 kB)
|████████████████████████████████| 178 kB 1.2 MB/s
Collecting urllib3<1.27,>=1.21.1
Downloading urllib3-1.26.3-py2.py3-none-any.whl (137 kB)
|████████████████████████████████| 137 kB 227 kB/s
Collecting idna<3,>=2.5
Downloading idna-2.10-py2.py3-none-any.whl (58 kB)
|████████████████████████████████| 58 kB 2.2 MB/s
Collecting certifi>=2017.4.17
Downloading certifi-2020.12.5-py2.py3-none-any.whl (147 kB)
|████████████████████████████████| 147 kB 2.3 MB/s
Installing collected packages: urllib3, idna, chardet, certifi, requests
Successfully installed certifi-2020.12.5 chardet-4.0.0 idna-2.10 requests-2.25.1 urllib3-1.26.3
(test_env) lihuandeMacBook-Pro:virtualenvs lihuan$
- 退出当前虚拟环境
(test_env) lihuandeMacBook-Pro:virtualenvs lihuan$ deactivate
Flask
Flask 的设计易于使用和扩展。它的初衷是为各种复杂的Web应用程序构建坚实的基础。可以自由地插入任何扩展。也可以自由构建自己的模块。Flask 适合各种项目。它对原型设计特别有用。Flask 依赖于两个外部库:Jinja2 模板引擎和 Werkzeug WSGI 工具包。 Flask 是最精致,功能最丰富的微框架之一。Flask 还很年轻,拥有蓬勃发展的社区,一流的扩展和漂亮的 API。Flask 具有快速模板,强大的 WSGI 功能,在 Web 应用程序和库级别的完整单元可测性,以及大量文档等优点。 选用 Flask 框架也是因为它方便入手,结构简单,零配置,是个学习 Python Web 开发的好工具。
安装virtualenv
代码语言:javascript复制pip3 install virtualenv
安装Flask
代码语言:javascript复制lihuandeMacBook-Pro:master lihuan$ pip3 install flask
Collecting flask
Downloading https://files.pythonhosted.org/packages/f2/28/2a03252dfb9ebf377f40fba6a7841b47083260bf8bd8e737b0c6952df83f/Flask-1.1.2-py2.py3-none-any.whl (94kB)
|████████████████████████████████| 102kB 905kB/s
Collecting click>=5.1 (from flask)
Downloading https://files.pythonhosted.org/packages/d2/3d/fa76db83bf75c4f8d338c2fd15c8d33fdd7ad23a9b5e57eb6c5de26b430e/click-7.1.2-py2.py3-none-any.whl (82kB)
|████████████████████████████████| 92kB 3.3MB/s
Collecting Jinja2>=2.10.1 (from flask)
Downloading https://files.pythonhosted.org/packages/7e/c2/1eece8c95ddbc9b1aeb64f5783a9e07a286de42191b7204d67b7496ddf35/Jinja2-2.11.3-py2.py3-none-any.whl (125kB)
|████████████████████████████████| 133kB 289kB/s
Collecting Werkzeug>=0.15 (from flask)
Downloading https://files.pythonhosted.org/packages/cc/94/5f7079a0e00bd6863ef8f1da638721e9da21e5bacee597595b318f71d62e/Werkzeug-1.0.1-py2.py3-none-any.whl (298kB)
|████████████████████████████████| 307kB 2.6MB/s
Collecting itsdangerous>=0.24 (from flask)
Downloading https://files.pythonhosted.org/packages/76/ae/44b03b253d6fade317f32c24d100b3b35c2239807046a4c953c7b89fa49e/itsdangerous-1.1.0-py2.py3-none-any.whl
Collecting MarkupSafe>=0.23 (from Jinja2>=2.10.1->flask)
Downloading https://files.pythonhosted.org/packages/0c/12/37f68957526d1ec0883b521934b4e1b8ff3dd8e4fab858a5bf3e487bcee9/MarkupSafe-1.1.1-cp38-cp38-macosx_10_9_x86_64.whl
Installing collected packages: click, MarkupSafe, Jinja2, Werkzeug, itsdangerous, flask
Successfully installed Jinja2-2.11.3 MarkupSafe-1.1.1 Werkzeug-1.0.1 click-7.1.2 flask-1.1.2 itsdangerous-1.1.0
WARNING: You are using pip version 19.2.3, however version 21.0.1 is available.
You should consider upgrading via the 'pip install --upgrade pip' command.
lihuandeMacBook-Pro:master lihuan$
查看Flask
代码语言:javascript复制lihuandeMacBook-Pro:master lihuan$ pip3 list
Package Version
------------ -------
click 7.1.2
Flask 1.1.2
itsdangerous 1.1.0
Jinja2 2.11.3
MarkupSafe 1.1.1
pip 19.2.3
setuptools 41.2.0
Werkzeug 1.0.1
WARNING: You are using pip version 19.2.3, however version 21.0.1 is available.
You should consider upgrading via the 'pip install --upgrade pip' command.
lihuandeMacBook-Pro:master lihuan$
验证Flask
代码语言:javascript复制Python 3.8.3 (v3.8.3:6f8c8320e9, May 13 2020, 16:29:34)
[Clang 6.0 (clang-600.0.57)] on darwin
Type "help", "copyright", "credits" or "license()" for more information.
>>> import flask
>>>
导入Flask
Pycharm引入Flask模块,选择安装即可成功导入。
代码语言:javascript复制from flask import Flask # 引入Flask模块
使用Flask
最简单的Web应用 hello.py
from flask import Flask # 引入Flask模块
app = Flask(__name__) # 创建一个应用
@app.route('/')
def index(): # 定义根目录处理器
return '<h1>Hello World!</h1>'
if __name__ == '__main__':
app.run() # 启动服务
使用pycharm启动,如果一起正常的话会有类似下面的反馈
代码语言:javascript复制* Serving Flask app "hello" (lazy loading)
* 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)
因为是通过
app.run()
启动的服务,所以会有个错误提示,提醒不能将此Web应用部署在生产环境中,可以暂时忽略
此时,打开浏览器,输入127.0.0.1:5000/ 或者 localhost:5000/, 就可以看到 Hello World! 欢迎字样。
代码语言:javascript复制127.0.0.1 - - [12/Mar/2021 19:11:12] "GET / HTTP/1.1" 200 -
127.0.0.1 - - [12/Mar/2021 19:11:12] "GET /favicon.ico HTTP/1.1" 404 -
127.0.0.1 - - [12/Mar/2021 19:11:16] "GET / HTTP/1.1" 200 -