实验1、初入Flask
实验介绍
1. 实验内容
Flask是一个用Python编写的Web应用程序框架。Armin Ronacher带领一个名为Pocco的国际Python爱好者团队开发了Flask。Flask基于Werkzeug WSGI工具包和Jinja2模板引擎。两者都是Pocco项目。学习Flask能够帮助我们快速使用Python构建Web服务
2. 实验要点
- 掌握安装和配置Flask环境
- 尝试编写Flask版"Hello World"
3.实验环境
- Centos 7.9
4. 工作目录
本实验的工作目录为: /experiment
使用以下命令创建
mkdir /experiment
Flask介绍
1.什么是Flask?
Flask是一种基于Python的Web开发框架。
Flask包含了内置的开发服务器和调试工具。Flask与其他框架最大的不同是允许Web开发人员开发更加灵活,并可以轻松根据开发社区的变化更改自己的服务。
2.Flask能做什么?
我们可以使用基于Python语言的Flask框架来开发Web应用程序。它集成了很多第三方的服务和API使得开发程序功能更加丰富和完善。Flask的核心概念十分简单,而且很小。
安装Python
检查你的环境是否安装Python3,如果没有安装,到 Python官网下载安装合适当前系统的版本。
本文以Centos7.9安装Python3.6为例:
cd /experiment
安装python3 需要很多的依赖包,所以我们先安装依赖包,在Linux上直接敲击命令就可以。
yum -y groupinstall "Development tools"
yum -y install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel
yum install libffi-devel -y
下载python3 安装包
wget https://www.python.org/ftp/python/3.7.0/Python-3.7.0.tar.xz
tar -xvJf Python-3.7.0.tar.xz
下载完,并解压完成后,开始编译安装
mkdir /usr/local/python3
cd Python-3.7.0
./configure --prefix=/usr/local/python3
make && make install
创建软件连接:就是一个指向,以后可以直接调用python3
ln -s /usr/local/python3/bin/python3 /usr/local/bin/python3
ln -s /usr/local/python3/bin/pip3 /usr/local/bin/pip3
验证一下
[root@bogon experiment]# python3 -V
Python 3.7.0
[root@bogon experiment]# pip3 -V
pip 10.0.1 from /usr/local/python3/lib/python3.7/site-packages/pip (python 3.7)
[root@bogon experiment]#
建立Python虚拟环境
使用以下命令安装venv包(下载过程已完成,无需再次操作)
yum install -y python3.7-venv
使用下面的命令创建虚拟环境venv
python3 -m venv venv
在终端输入命令执行后,会在当前目录生成与虚拟环境同名的目录。
使用下面的命令激活刚刚创建的Python虚拟环境。
source venv/bin/activate
也可以使用deactivate
退出使用虚拟环境。
安装wheel
包以便安装其他内容(下载过程已完成,无需再次操作)。
[root@bogon experiment]# source venv/bin/activate
(venv) [root@bogon experiment]# pip3 install wheel
Collecting wheel
Downloading https://files.pythonhosted.org/packages/65/63/39d04c74222770ed1589c0eaba06c05891801219272420b40311cd60c880/wheel-0.36.2-py2.py3-none-any.whl
Installing collected packages: wheel
Successfully installed wheel-0.36.2
You are using pip version 10.0.1, however version 21.0.1 is available.
You should consider upgrading via the 'pip install --upgrade pip' command.
(venv) [root@bogon experiment]#
下载并安装Flask
遵循以下步骤安装Flask
pip3 install flask
flask --help
Werkzeug
Werkzeug是WSGI工具箱。WSGI只是Web服务器将Web请求转发到以Python编程语言编写的Web应用程序的调用约定。
Jinja
模块化十Web程序开发人员的基础技能。Jinja是基于Python的功能齐全且流行的模板引擎。它是一种富有表现力的语言,为模板作者提供了一套强大的工具。
请按照以下步骤安装MongoDB。我们概述了将其安装在基于Debian的Linux中的步骤。如果使用的是其他操作系统,请访问链接并按照预期的操作系统进行安装。
安装MongoDB
创建一个 mongodb-org-3.6.repo 文件
vi /etc/yum.repos.d/mongodb-org-3.6.repo
在文件中加入如下内容:
[mongodb-org-3.6]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/amazon/2013.03/mongodb-org/3.6/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-3.6.asc
退出编辑模式,直接输入如下命令安装即可:
yum install -y mongodb-org
安装成功后,使用以下命令配置MongoDB
默认情况下MongoDb启动后会初始化以下两个目录:
- 数据存储目录:/var/lib/mongo
- 日志文件目录:/var/log/mongodb
我们在启动前可以先创建这两个目录并设置当前用户有读写权限:
mkdir -p /var/lib/mongodb
mkdir -p /var/log/mongodb
chown `whoami` /var/lib/mongodb # 设置权限
chown `whoami` /var/log/mongodb # 设置权限
接下来启动Mongodb服务
mongod --dbpath /var/lib/mongodb --logpath /var/log/mongodb/mongod.log --fork
之后输入mongo
启动Mongodb。
Flask-"Hello World"
使用下面命令安装flask-appbuilder和mongoengline
pip3 install flask-appbuilder
pip3 install mongoengine
pip3 install flask-mongoengine
使用以下代码创建一个基础应用。
flask fab create-app
输入项目名称(exampleApp)和数据库引擎(MongoEngine),就能在当前目录下看到新生成的项目文件。
该目录的结果如下图所示:
要运行该程序需要进入exampleApp目录下输入以下命令:
flask run
要在flaskTutorialApp中创建第一个程序,请打开app目录下的views.py
文件并添加以下代码。查找文件中给出的导入语句。如果还不存在,请添加这些语句。
from flask_appbuilder import BaseView, expose
from app import appbuilder
class HelloWorld(BaseView):
route_base = "/hello"
@expose("/")
def hello(self):
return "Hello, World!"
appbuilder.add_view_no_menu(HelloWorld())
保存后再次启动Flask服务器flask run
,通过访问127.0.0.1:5000/hello
观察结果
调试
之前,开发服务器未在调试模式下运行。如果没有调试模式,则很难在Flask应用程序的源代码中找到错误。
Flask中的调试模式会产生以下结果:
- 调试模式激活自动重新加载器。这意味着我们在更改应用程序的源代码后无需重启开发服务器。
- 调试模式将激活Python调试器。我们可以在异常期间检查变量的值。
- 调试模式启用Flask应用程序调试。我们可以在调试会话中检查各种变量的值。
如果开发服务器已经在运行,请停止它。您可以使用CTRL + C或键盘中断来执行相同的操作。
使用以下代码启用调试模式并临时运行开发服务器。
FLASK_ENV=development flask run
在控制台上查看调试器PIN,并记下它。
现在,使用以下代码片段行更改上面编写的HelloWorld视图。注意,我们引入了一个自定义异常。
@expose("/")
def hello(self):
raise Exception("A custom exception to learn DEBUG Mode")
return "Hello, World!"
导航到127.0.0.1:5000/hello/
,您将看到该应用程序引发了异常。浏览器显示堆栈跟踪,如下所示。
现在,在浏览器中检查堆栈跟踪并转到最后一行。单击它以展开其视图,然后单击CLI图标以交互方式打开Shell。
打开它后,您将看到浏览器将显示提示调试PIN。输入调试PIN,然后单击“确定”。
输入调试PIN后继续进行操作后,便可以访问交互式外壳程序(最下方)。
我们从浏览器内部访问外壳程序,并且可以检查变量的值以查找导致异常的原因并以更好的方式处理错误。请查看下图所示的示例之一。
locals()
globals()
self
测试Flask程序
现在,让我们为正在开发的Flask应用程序编写第一个测试。首先,安装PyTest。PyTest是一个测试框架。它有助于我们编写更好的代码。
而且,仅仅因为我们可以在开发应用程序时编写单元测试,所以可以遵循TDD方法。TDD代表测试驱动开发。在本系列的后续教程中,我们将始终首先编写测试并开发我们的视图或模型。
安装PyTest(安装过程已完成,无需再次操作)
pip3 install pytest
现在,在应用程序目录中创建一个名为test_hello.py
的文件。让我们编写第一个单元测试来测试我们的观点。
from app import appbuilder
import pytest
@pytest.fixture
def client():
""" A pytest fixture for test client """
appbuilder.app.config["TESTING"] = True
with appbuilder.app.test_client() as client:
yield client
def test_hello(client):
""" A test method to test view hello """
resp = client.get("/hello", follow_redirects=True)
assert 200 == resp.status_code
使用下面的pytest命令运行测试。PyTest自动收集测试并将结果显示在标准输出上,运行之前记得备注掉raise Exception("A custom exception to learn DEBUG Mode")
(这句是调试的时候加的)。
pytest test_hello.py
实验总结
在本教程中,我们涵盖了从必备环境条件到为使用Flask(基于Python的Web开发框架)开发的Web应用程序设置CI / CD工作流的所有基本概念。
本教程涵盖了所有必要步骤,例如安装Python,下载和安装Flask,使用Flask-Appbuilder,使用PyTest进行测试等,以开始使用Python进行Web开发。