这个Python Flask入门教程解释了什么是Flask、Python的安装、Virtualenv、Flask Hello World的例子,其中有一节是关于代码示例、调试和测试:
网站开发与其说是一种技能,不如说是一门艺术。 它需要耐心和勤奋,以及毅力、勇气和奉献精神,才能创造出真正的成功。 这些天,学习者必须尽快进入状态。
我们为学生创建了这个Python Flask教程,让他们能够快速掌握并使用Python 3实现简单以及复杂的网络编程。
这个Python Flask教程更像是一个flask初学者教程,它将涵盖Python、Virtualenv和其他基本软件包的安装。 在这个系列教程中,我们还将安装Flask以及其他必要的Flask插件。 我们还包括一个关于代码调试、测试和使用Git Actions进行持续集成的章节。
这个Flask系列的教程列表
教程#1: Python Flask教程--Flask入门介绍
教程#2: Flask模板、表单、视图和重定向的例子
教程#3: Flask数据库处理--如何利用数据库使用Flask
教程#4: 用Blueprint & Bootstrap设计Flask应用程序和Flask项目布局
教程#5: 网络应用程序的Flask设计模式和最佳实践
教程#6: Flask API教程与实例
教程#7: Django Vs Flask Vs Node: 选择哪个框架
教程#8: 热门的31个Python Flask面试问题及答案
什么是烧瓶
Flask是一个网络开发框架。 它是一个具有内置开发服务器和调试器的框架。
Flask框架本身就与其他原型不同,因为它允许网络开发人员灵活地适应软件开发社区频繁发布的变化。
烧瓶是用来做什么的
我们使用Flask框架来开发Python编程语言的Web应用程序。 它与其他第三方服务和API集成,为正在开发的应用程序带来丰富的内容和意义。 Flask的核心概念很简单,而且它的占地面积很小。
让我们从这个Python Flask教程开始,在Flask GitHub仓库的帮助下了解Web开发。 然而,在继续之前,请从Github上克隆项目,以方便跟进讨论的代码示例。
先决条件
除了本节提到的标题外,我们建议创建一个Github账户。 让我们继续下面提到的先决条件中的步骤。
第1步:安装Python
检查你是否已经安装了Python 3,如果没有,那么从这里下载Python 3并根据你的操作系统进行安装。
第2步:创建一个Python虚拟环境
使用下面的命令创建一个虚拟环境。
python3 -m venv venv
使用下面的命令来激活Python虚拟环境。
source venv/bin/activate
我们在下面给出了一个激活和停用虚拟环境的例子。
本教程中的所有后续命令都应该在激活的虚拟环境中运行。 安装wheel软件包,这样我们就可以在虚拟环境中构建轮子。
pip install wheel
第3步:Flask下载和安装
我们需要执行Flask的下载步骤,并使用下面提到的步骤安装Flask。
现在安装Flask。
pip安装flask
我们中的一些人喜欢与最新的源代码变化一起工作。 我们可以使用下面给出的命令来安装Flask的源代码的最新变化。
制作一个临时目录。
mkdir tmp
现在从Github仓库安装Flask。 你需要保持连接到互联网,以使下面的命令生效。
pip3 install -e [email protected]:pallets/flask.git#egg=flask
看看控制台的输出,检查是否安装成功。 现在检查我们是否可以访问Flask命令。
flask --help
你可能会看到一些关于没有Flask应用程序的例外情况。 然而,忽略这些,因为我们没有创建任何Flask应用程序。 我们的应用程序是Flask的一个实例,它是Werkzeug网络框架和Jinja模板引擎的一个封装。
工具箱
Werkzeug是一个WSGI工具箱。 WSGI只是网络服务器转发的一个调用约定。 网络请求 到用Python编程语言编写的网络应用。
金佳
模板制作是网站开发人员的基本技能。 Jinja是一个功能齐全且流行的Python模板引擎。 它是一种相当有表现力的语言,为模板作者提供了一套强大的工具。
第4步:安装MongoDB
按照下面提到的步骤来安装MongoDB。 我们已经概述了在基于Debian的Linux中的安装步骤。 如果你使用的是其他操作系统,那么访问链接并按照预定的操作系统来安装。
安装gnupg以导入MongoDB的公共GPG密钥。
sudo apt-get install gnupg
现在使用下面的命令导入钥匙。
wget -qO - //www.mongodb.org/static/pgp/server-4.2.asc
根据你的Linux发行版创建源列表文件。 我们已经添加了Debian的源列表。
echo "deb //repo.mongodb.org/apt/debian buster/mongodb-org/4.2 main"
运行更新命令
sudo apt-get update
现在安装MongoDB,使用下面的命令。
sudo apt-get install -y mongodb-org
一旦安装成功,使用以下命令启动MongoDB。
sudo systemctl start mongod
检查MongoDB的状态,使用下面的命令。
sudo systemctl status mongod
现在,确保mongod在系统重启时自动启动,发出下面的命令。
sudo systemctl enable mongod
现在检查你是否可以使用mongo客户端连接到MongoDB服务器。
蒙哥
在mongo shell中,尝试使用帮助和显示dbs命令。
创建一个Flask应用程序
使用下面的命令来安装flask-appbuilder和mongoengine。
pip安装flask-appbuilder pip安装mongoengine pip安装flask_mongoengine
创建一个骨架应用程序,其值在下面的代码片断中显示为注释。
flask fab create-app # 在命令行问卷中给出以下值 # 应用程序名称:flaskTutorialApp # 引擎类型:MongoEngine
我们将看到类似于下面的输出。
你的新应用名称:exampleApp 你的引擎类型,SQLAlchemy或MongoEngine(SQLAlchemy,MongoEngine) [SQLAlchemy]:MongoEngine 下载了骨架应用,编码很好
请看一下项目和应用程序的布局。 我们在下面显示了树形命令的输出。
让我们来看看Flask的配置文件,它是上一条命令产生的默认配置。 取消注释 赛博格 主题,如下图所示。
# Cybord=g的主题配置 # 这些主题位于static/appbuilder/css/themes # 我们可以创建自己的主题,并通过将它们放在相同的dir结构中覆盖来轻松使用它们 #APP_THEME = "bootstrap-theme.css" # 默认bootstrap #APP_THEME = "cerulean.css" # cerulean #APP_THEME = "amelia.css" # amelia主题 #APP_THEME = "cosmo.css" # cosmo主题 APP_THEME = "cyborg.css" #cyborg主题 #APP_THEME = "flatly.css" # flatly主题
要运行骨架应用程序,请在终端上使用下面给出的命令。
烧瓶运行
Flask Hello World
要在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! from Software Testing Help" # 在文件的最后 appbuilder.add_view_no_menu(HelloWorld()
加入上述源代码后保存文件。 进入项目的根目录,使用下面的命令运行Flask的开发服务器。
烧瓶运行
现在导航到//localhost:5000/hello/,在浏览器中看到输出。
调试
目前,开发服务器没有运行在调试模式下。 如果没有调试模式,就很难发现Flask应用程序源代码中的错误。
Flask中的调试模式结果如下:
- 调试模式激活了自动重新加载器。 这意味着我们在对应用程序的源代码进行修改后,不需要重新启动开发服务器。
- 调试模式激活了Python调试器。 我们可以在Exception过程中检查变量的值。
- 调试模式启用Flask应用程序的调试。 我们可以在调试会话中检查各种变量的值。
如果开发服务器已经在运行,请停止它。 你可以使用CTRL + C或键盘中断来做同样的事情。
使用下面的代码来启用调试模式并暂时运行开发服务器。
FLASK_ENV=development flask run
在控制台中搜索调试器密码,并记下它。
现在让我们用下面几行代码片断来改变上面写的HelloWorld视图。 注意,我们引入了一个自定义的异常。
@expose("/") def hello(self): raise Exception("A custom exception to learn DEBUG Mode") return "Hello, World! from Software Testing Help"
导航到//localhost:5000/hello/,你会看到应用程序引发了一个异常。 浏览器显示堆栈跟踪,如下所示。
![](/wp-content/uploads/guides/iae5sr2a76-3.png)
此外,看看开发服务器运行的控制台。 你会发现,这一次,views.py中的变化被自动检测到了,并且调试服务器自己重新启动了。 现在我们不需要手动重新启动它。
控制台会有几行字,如下图所示。 我们需要记下Debug PIN,以便以后使用。
* 检测到'/work/sth/flaskTutorialApp/app/views.py'的变化,重新加载 2020-06-02 14:59:49,354:INFO:werkzeug: * 检测到'/work/sth/flaskTutorialApp/app/views.py'的变化,重新加载 * 用统计程序重新启动 2020-06-02 14:59:49,592:INFO:werkzeug: * 用统计程序重新启动 *调试器已激活! *调试器密码:150-849-897
现在,在浏览器中检查堆栈跟踪,进入最后一行,点击它展开视图,并点击CLI图标,在交互模式下打开shell。
![](/wp-content/uploads/guides/iae5sr2a76-4.png)
一旦你打开它,你会看到浏览器将显示调试密码的提示。 给出调试密码并点击确定。
![](/wp-content/uploads/guides/iae5sr2a76-5.png)
一旦我们在给出Debug PIN后继续前进,我们就可以访问交互式外壳。
我们从浏览器中访问shell,可以检查变量的值,以找到异常的原因,并以更好的方式处理错误。 请看下面图片中的一个例子。
![](/wp-content/uploads/guides/iae5sr2a76-6.png)
现在修改view.py中的代码,如下图所示。 注意,我们对出现异常的那一行进行了注释。
@expose("/") def hello(self): # raise Exception("A custom exception to learn DEBUG Mode") return "Hello, World! from Software Testing Help"
测试Flask应用程序
现在让我们为正在开发的Flask应用程序编写第一个测试。 首先,安装PyTest。 PyTest是一个测试框架。 它可以帮助我们编写更好的代码。
此外,正因为我们可以在开发应用程序时编写单元测试,所以可以遵循TDD方法。 TDD是测试驱动开发的意思。 在本系列的后续教程中,我们将始终先编写测试,然后开发我们的视图或模型。
安装PyTest
pip install pytest
现在在app目录下创建一个名为test的目录,并在其中创建一个名为test_hello.py的文件。 让我们编写第一个单元测试来测试我们的视图。
复制以下代码片断并粘贴到test_hello.py中。
#!/usr/bin/env python from app import appbuilder import pytest @pytest.fixture def client(): """ 一个测试客户端的pytest fixture ""appbuilder.app.config["TESTING"] = True with appbuilder.app.test_client() as client: yield client def test_hello(client): """ 一个测试方法,用于测试视图 hello """ resp = client.get("/hello", follow_redirects=True) assert 200 == resp.status_code
使用下面的pytest命令来运行测试,PyTest会自动收集测试并在标准输出上显示结果。
![](/wp-content/uploads/guides/iae5sr2a76-7.png)
创建一个GitHub工作流
我们使用Git Actions为我们的示例应用程序创建一个CI/CD工作流。 按照下面提到的步骤进行项目。
第1步:导航到GitHub上的仓库页面。 点击Git Actions。
![](/wp-content/uploads/guides/iae5sr2a76-8.png)
第2步:在页面上向下滚动,找到一个Python包的现有工作流程模板。
![](/wp-content/uploads/guides/iae5sr2a76-9.png)
第3步:设置Python包工作流程。
![](/wp-content/uploads/guides/iae5sr2a76-10.png)
第4步:一旦打开python-package.yml工作流配置,根据给定的yaml附加标签值更新它。
name: flaskTutorialApp jobs: build: runs-on: ubuntu-latest strategy: matrix: python-version: [3.7, 3.8] mongodb-version: [4.2] steps: - name: Start MongoDB uses: supercharge/[email protected] with: mongodb-version: ${{ matrix.mongodb-version }} # other values
我们想在最新的Ubuntu Linux发行版上测试我们的Flask应用程序。 除了操作系统之外,我们还想只使用Python 3.7和Python 3.8来运行我们的测试。
第5步:提交带有更新值的python-package.yml。
![](/wp-content/uploads/guides/iae5sr2a76-11.png)
第6步:上一页的提交将我们带到GitActions作业。
![](/wp-content/uploads/guides/iae5sr2a76-12.png)
第7步: [可选]
在样本教程应用的Github Jobs页面上,我们可以创建一个徽章,并将其放在README.md文件上,以显示构建状态。
现在,每当有改动提交到主干分支时,就会按照python-package.yml中写的Git工作流程,在Git Actions上运行。
总结
在本教程中,我们已经涵盖了从先决条件到为使用Flask(一种基于Python的Web开发框架)开发的Web应用程序设置CI/CD工作流的所有基本概念。
本教程涵盖了所有必要的步骤,如安装Python、下载&;安装Flask、使用Flask-Appbuilder、使用PyTest进行测试等,以开始使用Python进行Web开发。 Web开发社区通常将Flask与另一个流行的Python Web开发框架Django相比较。
我们将解释这些差异,并将在本系列的一个教程中比较这些框架。