实验介绍

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. node-util

    Node.js 常用工具 util 是一个Node.js 核心模块,提供常用函数的集合,用于弥补核心JavaScript 的功能 过于精简的不足. util.inherits util.inherit ...

  2. postgresql高级应用之合并单元格

    postgresql高级应用之合并单元格 转载请注明出处https://www.cnblogs.com/funnyzpc/p/14732172.html 1.写在前面✍ 继上一篇postgresql高 ...

  3. 【Git】5. 远程库(GitHub)相关操作

    之前也提到了,在整个协作的过程中,必不可少的就是远程库了.Github作为一个全球最大的同性交友网站,同样也是一个非常强大的远程库. 现在希望将本地的hello.txt文件也推到github上去,那首 ...

  4. 学javaweb 先学Servlet 应用理论很重要

    package cn.Reapsun.servlet; import java.io.IOException; import java.io.PrintWriter; import javax.ser ...

  5. 全套Project版本安装教程及下载地址

    1:Project 2007 安装教程及下载地址 https://mp.weixin.qq.com/s/8iI7x1qjon0yAdo3bStjzw 2:Project 2010 安装教程及下载地址 ...

  6. .NET 反射(Reflection)

    这节讲一下.NET 中的一个技术:反射(Reflection). 反射是一种很重要的技术,它可以在程序运行时,动态的获取类的实例,并调用实例中的任何方法.它就像一面镜子,映射出一个类的所有细节.    ...

  7. Jmeter(四十四) - 从入门到精通高级篇 - Jmeter远程启动(本地运行+远程运行)(详解教程)

    1.简介 这篇文章其实很简单,就是为下一篇文章做一个铺垫,所以宏哥给小伙伴或童鞋们提前热身一下. 2.什么是远程运行? 远程执行,就是脚本放在本地,执行却在另一台电脑上执行,当然,可以是远程多台电脑一 ...

  8. [bug] vscode output 输出乱码

    参考 https://blog.csdn.net/qq_34192032/article/details/105077173 https://blog.csdn.net/a19990412/artic ...

  9. [刷题] PTA 查验身份证

    题目: 7-63 查验身份证 (15 分)  一个合法的身份证号码由17位地区.日期编号和顺序编号加1位校验码组成.校验码的计算规则如下: 首先对前17位数字加权求和,权重分配为:{7,9,10,5, ...

  10. GB 18030-2000《信息技术信息交换用汉字编码字符集基本集的扩充

    中文编码:GB2312编码.GBK编码.GB18030编码 2016-09-01 0 By ADMIN 一.GB 2312编码 中华人民共和国国家标准简体中文字符集,全称<信息交换用汉字编码字符 ...