实验介绍

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中的调试模式会产生以下结果:

  1. 调试模式激活自动重新加载器。这意味着我们在更改应用程序的源代码后无需重启开发服务器。
  2. 调试模式将激活Python调试器。我们可以在异常期间检查变量的值。
  3. 调试模式启用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开发。

实验1、初入Flask的更多相关文章

  1. Scala初入

    何为Scala物 Scala为基于JVM虚拟机中的面向对象与函数式编程思想并且完全兼容Java的混合编程语言,可以是Scala与Java是同根同源的,既然Scala与JAVA都是基于JVM之上的编程语 ...

  2. 初学HTML5、初入前端

    学习HTML5是一个漫长的过程,当中会遇到很多技术与心态上的变化.刚开始学习,我们不能发力过猛,需要一个相对稳定的状态去面对.多关注一些自己感兴趣的网站和技术知识,建立自己的信心与好奇心,为以后的学习 ...

  3. 0x00linux32位汇编初入--前期准备

    0x00汇编初入--前期准备 一.汇编工具 在linux平台下常用的编译器为as,连接器为ld,使用的文本编辑器为vim,汇编语法为att 以下是一些工具: addr2line 把地址转换为文件名和行 ...

  4. 初入职场的建议--摘自GameRes

    又开始一年一度的校招了,最近跑了几个学校演讲,发现很多话用短短的一堂职业规划课讲还远远不够,因为那堂课仅仅可能帮大家多思考怎样找到一份合适的工作,并没有提醒大家怎样在工作中发展自己的职业. 见过这么多 ...

  5. 【Xbox one S】开箱&开机&初入坑心得

    再来一发水贴,先上产品标准照镇贴: 前言 身为一个资深单机游戏玩家,常年混迹在PC平台,但内心深处一直对主机有种迷之向往,感觉那才是单机游戏的正处之地,坐沙发上拿着手柄对着电视跌宕起伏才是正确的游戏姿 ...

  6. 初窥Flask

    初窥Flask Flask是一个基于Python开发并且依赖jinja2模板和Werkzeug WSGI服务的一个微型框架,对于Werkzeug本质是Socket服务端,其用于接收http请求并对请求 ...

  7. Git初入

    Git记录 使用git 也有一段时间了, git的入门级了解也就不再多说, 但平常使用中, 仍然会遇到很多问题, 在此记录一二. 在查资料的过程中, 发现了两个比较好的资料: 特别是第二个, 相当详细 ...

  8. SuperMap iClient for JavaScript初入

    SuperMap iClient for JavaScript初入 介绍SuperMap for Js的简单使用. 推荐先看下这篇文档:SuperMap iClient for JavaScript ...

  9. 初入前端框架bootstrap--Web前端

    Bootstraps是一种简洁.直观.强悍的前端开发框架,它让web开发更迅速.简单.对于初入Bootstrap的小白,高效进入主题很重要,能为我们节省很多时间,下面我将对使用Bootstrap开发前 ...

随机推荐

  1. MySQL的Double Write并不难理解

    目录 问题引入- 断电了 不一会 - 来电了 Double write工作流程 恢复的过程 配置参数 疑问 推荐阅读 问题引入- 断电了 今天为大家介绍一个新的名词:double write. 相信你 ...

  2. $ git push -u origin master 报错

    输入$ git push -u origin master报permission denied(publickey) 如下: 原因是没有与gitee上的账号成功建立密钥对,所以需要配对密钥 解决方法( ...

  3. 关于MySQL参数,这些你要知道

    前言: 在前面一些文章中,经常能看到介绍某某参数的作用,可能有些小伙伴仍搞不清楚 MySQL 参数是啥.本篇文章我们来聊聊 MySQL 参数,学习下如何管理维护 MySQL 参数. 1.MySQL参数 ...

  4. OO第三单元作业(JML)总结

    OO第三单元作业(JML)总结 目录 OO第三单元作业(JML)总结 JML语言知识梳理 使用jml的目的 jml注释结构 jml表达式 方法规格 类型规格 SMT Solver 部署JMLUnitN ...

  5. 【BUAA软工】第一次团队作业——团队介绍

    项目 内容 班级:北航2020春软件工程 博客园班级博客 作业:团队介绍与采访往届团队 团队作业-团队介绍和采访 Part I 团队成员介绍 有图有真(jia)相 大名 个人介绍 角色意向 李PX 来 ...

  6. ZOHO荣登“2020中国ToB行业年度企业影响力”榜单

    近日,3WToB行业头条正式揭晓<2020中国ToB行业年度榜单 · 企业影响力榜>. 此次评选,ToB行业头条联合3W集团.50+知名投资机构.60+权威媒体及资深行业人士,进行深度调研 ...

  7. [Java] 数据分析 -- 大数据

    单词计数 需求:输入小说文本,输出每个单词出现的次数 实现:分map.combine.reduce三个阶段实现 1 /* Data Analysis with Java 2 * John R. Hub ...

  8. [前端] AJAX

    背景 Asynchronous JavaScript And XML:异步js和XML,可实现异步刷新 用途 验证提交的用户名是否已存在 不使用AJAX,需要提交数据后,刷新页面来验证 使用AJAX, ...

  9. 对ansible不支持service模块的status命令进行修正

    原生的ansible不支持service.status,在Google之后,发现有人提交了一个patch,可以支持status选项.见https://github.com/ritzk/ansible- ...

  10. 有关fgets和fcntl的讨论-待整理更新

    问题引出 一个client程序:select 超时监听 sockfd套接字 和 STDIN_FILENO标准输入:若sockfd可读则接收server报文:若标准输入可读(按下回车),则开始用fget ...