python Flask框架如何请求及返回数据——flask详细教程

文章目录:

  • 1 Flask介绍
    • 1.1 Flask简单介绍
    • 1.2 Flask相关资料信息
  • 2 Flask快速入门
    • 2.1 Flask编写一个hello world
    • 2.2 Flask编写一个hello world,程序解析
      • 2.2.1 导入Flask类
      • 2.2.2 创建Flask实例对象
      • 2.2.3 注册路由(route)
      • 2.2.4 启动Flask创建的web服务
    • 2.3 例子:flask请求返回处理后的图片

1 Flask介绍

1.1 Flask简单介绍

Flask是一个相对于Django而言轻量级的Web框架它提供了一个web应用后端处理的框架,通过Flask中封装好的api来进行网页的渲染、及定制api的实现。和Django大包大揽不同,Flask建立于一系列的开源软件包之上,这其中 最主要的是WSGI应用开发库Werkzeug模板引擎Jinja

  • 策略werkzeugJinja这两个库和Flask一样,都是pocoo团队开发的。这 或许体现了pocoo与Django竞争时关于生态的一种策略,这种策略的自然 延伸是Flask框架没有包含数据库方面的构件,无论ORM还是其他。

  • 关注点Flask是一个WSGI应用框架,这意味着我们进行Flask开发时,不需要关注网络方面的操作,Flask应用的入口封装过的网络请求包出口网络响应,我们仅需要关注这个阶段内的处理逻辑。

  • WSGI服务器 :Flask虽然内置了简单的WSGI服务器,但其性能仅仅适用于开发期的调试。 Flask官网推荐了多种WSGI服务器,实现方式从多进程到多线程到协程, 这方面的选择我们在本课程中将不涉及。

  • REST适应性 :虽然Flask和Django一样,最初的出发点都是服务端的动态网页应用。但 Flask的设计使之也相当适用于面向资源的REST架构,在越来越移动化 并且单页应用越来越重要的WEB开发领域,这是Flask相对于Django相当大的优势。

1.2 Flask相关资料信息

1、python Flask官网:

##1.3 Flask文件组织形式
Flask有着特定的文件组织形式,按照Flask文件组织如下:

Appserver/
├── App
│   ├── static/      # 静态资源文件夹
│   ├── templates/   # 模板文件夹
│   ├── __init__.py
│   ├── run.py    # 主程序文件
│   └── config.py    # 配置文件
├── requirements     # 需求文件
└── README.md
  • templates文件夹:存储html文件
  • static文件夹:存储用到的静态文件(图片,.css文件等)
  • run.py:写flask相关运行程序

2、python Flask中文文档

2 Flask快速入门

从编写一个Hello world ! 开始:

2.1 Flask编写一个hello world

创建一个run_flask.py文件,使用flask运行一个hello world

1、导入Flask类

from flask import Flask

Flask类是Flask框架的核心类,它实现了WSGI应用规范。

  • WSGI:Flask内置WSGI,通过使用WSGI封装了网络请求网络响应,这样我们就不用写网络请求和网络响应的接口了。

2、创建Flask实例对象

app = Flask(__name__)

3、注册路由(route)

@route('/')
def index():return 'Hello world!'

4、启动Flask创建的web服务

if __name__ == '__main__':app.run()

5、完整程序

from flask import Flask
app = Flask(__name__)@app.route('/')
def index():return 'Hello world!'if __name__ == '__main__':app.run()

然后在浏览器中输入:http://127.0.0.1:5000/ 就会看到:Hello world!问候

2.2 Flask编写一个hello world,程序解析

创建一个run_flask.py文件,使用flask运行一个hello world

2.2.1 导入Flask类

from flask import Flask

Flask类是Flask框架的核心类,它实现了WSGI应用规范。

  • WSGI:Flask内置WSGI,通过使用WSGI封装了网络请求网络响应,这样我们就不用写网络请求和网络响应的接口了。

2.2.2 创建Flask实例对象

app = Flask(__name__)print(type(app), app)
# <class 'flask.app.Flask'> <Flask 'run_flask'>

我们实力化Flask对象,这里初始化了一个参数:import_name=__name__

  • __name__:这个参数是模块或包的名称,这样 Flask 才知道到哪去找模板、静态文件等等(即上面提到的Flask的文件组织结构)

Flask类的初始化参数:

def __init__(self,import_name,static_url_path=None,static_folder="static",static_host=None,host_matching=False,subdomain_matching=False,template_folder="templates",instance_path=None,instance_relative_config=False,root_path=None,):# 初始化参数的作用:param import_name: the name of the application package:param static_url_path: can be used to specify a different path for thestatic files on the web.  Defaults to the nameof the `static_folder` folder.:param static_folder: the folder with static files that should be servedat `static_url_path`.  Defaults to the ``'static'``folder in the root path of the application.:param static_host: the host to use when adding the static route.Defaults to None. Required when using ``host_matching=True``with a ``static_folder`` configured.:param host_matching: set ``url_map.host_matching`` attribute.Defaults to False.:param subdomain_matching: consider the subdomain relative to:data:`SERVER_NAME` when matching routes. Defaults to False.:param template_folder: the folder that contains the templates that shouldbe used by the application.  Defaults to``'templates'`` folder in the root path of theapplication.:param instance_path: An alternative instance path for the application.By default the folder ``'instance'`` next to thepackage or module is assumed to be the instancepath.:param instance_relative_config: if set to ``True`` relative filenamesfor loading the config are assumed tobe relative to the instance path insteadof the application root.:param root_path: Flask by default will automatically calculate the pathto the root of the application.  In certain situationsthis cannot be achieved (for instance if the packageis a Python 3 namespace package) and needs to bemanually defined.

2.2.3 注册路由(route)

使用route() 装饰器告诉 Flask 什么样的URL 能触发我们的函数

@route('/')
def index():# 页面的跳转交给前端路由负责,后端不用再写大量的路由return 'Hello world!'

上面可能看不出来这个说的路由URL出发函数是怎么一回事,我们把装饰器的参数再改一下,你就明白了:

@route('/print_hello', methods=["POST"])
def index():# 页面的跳转交给前端路由负责,后端不用再写大量的路由return 'Hello world!'

此时在使用POST请求的路由URL ,必须是:http://127.0.0.1:5000/print_hello`,才能触发index函数的调用!

2.2.4 启动Flask创建的web服务

用 run() 函数来让应用运行在本地服务器上。 其中 if name ==‘main’: 确保服务器只会在该脚本被 Python 解释器直接执行的时候才会运行,而不是作为模块导入的时候。

1、使用run()默认参数

if __name__ == '__main__':app.run()

2、run()参数

run(self, host=None, port=None, debug=None, load_dotenv=True, **options):

  • host:主机的ip(服务端的ip,即运行flask程序的服务器)

    • 设置 host=‘0.0.0.0’,让操作系统监听所有公网 IP,把自己的电脑作为服务器,可以让别人访问,被人在浏览器中输入你的IP即可
    • 设置host='127.0.0.1',这个也是host的默认值,自己的机器
  • port:端口,默认值:port=5000
  • debug:是否开启调试模式,默认值:debug=False

3、开启调试模式,有两种方式

  • 在应用对象上设置
app.debug = True
app.run()
  • 作为run的参数传入
app.run(host='0.0.0.0', debug=True)

2.3 例子:flask请求返回处理后的图片

例子说明:
前端(postman)以POST请求发送一张图片,后端对图片进行一个镜像处理,然后再把这个响应返回前端

例子程序:

__Author__ = "Shliang"
__Email__ = "shliang0603@gmail.com"import os
import cv2
from flask import Flask, Response, request
app = Flask(__name__)
print(type(app), app)
# <class 'flask.app.Flask'> <Flask 'run_flask'>print(app.root_path)  # 返回的是当前运行文件run_flask.py所在的目录
# D:\ZF\1_ZF_proj\2_YOLO\YOLO数据集相关@app.route('/')
def index():return 'Hello world!'@app.route('/img_flip', methods=["POST"])
def process_img():# 接收前端传来的图片  image定义上传图片的keyupload_img = request.files['image']print(type(upload_img), upload_img)# <class 'werkzeug.datastructures.FileStorage'> <FileStorage: 'phone.jpg' ('image/jpeg')># 获取到图片的名字img_name = upload_img.filename# 把前端上传的图片保存到后端upload_img.save(os.path.join('./', upload_img.filename))# 对后端保存的图片进行镜像处理img_path = os.path.join('./', upload_img.filename)print('path', img_path)img = cv2.imread(img_path)img_flip = cv2.flip(img, 0)cv2.imwrite(os.path.join('./', 'res_' + upload_img.filename), img_flip)# 把图片读成二进制,返回到前端image = open(os.path.join('./', 'res_' + upload_img.filename), mode='rb')response = Response(image, mimetype="image/jpeg")return responseif __name__ == '__main__':app.run(host='0.0.0.0', port=5000, debug=True)

结果如下:

#3 Flask详细教程

参考1: https://blog.csdn.net/sinat_38682860/article/details/82354342# 个人学习笔记
参考2:https://www.w3cschool.cn/flask/flask_quick_guide.html # w3cschool文档,比较全
参考3: https://blog.csdn.net/m0_38088298/article/details/79901951
参考4:https://blog.csdn.net/weixin_30553065/article/details/96045980
参考5:
参考6:
参考7:
参考8:
参考9:

python Flask框架如何请求及返回数据——flask详细教程相关推荐

  1. python使用redis队列_Python的Flask框架应用调用Redis队列数据的方法

    任务异步化打开浏览器,输入地址,按下回车,打开了页面.于是一个HTTP请求(request)就由客户端发送到服务器,服务器处理请求,返回响应(response)内容. 我们每天都在浏览网页,发送大大小 ...

  2. python实时监控redis队列_Python的Flask框架应用调用Redis队列数据

    任务异步化 打开浏览器,输入地址,按下回车,打开了页面.于是一个HTTP请求(request)就由客户端发送到服务器,服务器处理请求,返回响应(response)内容. 我们每天都在浏览网页,发送大大 ...

  3. python flask框架下登录注册界面_Python的Flask框架中实现简单的登录功能的教程

    Python 的 Flask 框架中实现简单的登录功能的教程 , 登录是各个 web 框架中的基础功能 , 需要的朋友可以参考下 回顾 在前面的系列章节中, 我们创建了一个数据库并且学着用用户和邮件来 ...

  4. ajax顺序请求你,ajax请求之返回数据的顺序问题分析

    这篇文章主要介绍了ajax请求之返回数据的顺序问题,结合实例形式分析了ajax请求返回值的排序问题,需要的朋友可以参考下 本文实例分析了ajax请求之返回数据的顺序问题.分享给大家供大家参考,具体如下 ...

  5. ajax返回的数据有问题,ajax请求成功返回数据,转成数组后,for遍历取不到值的有关问题...

    当前位置:我的异常网» Ajax » ajax请求成功返回数据,转成数组后,for遍历取不到 ajax请求成功返回数据,转成数组后,for遍历取不到值的有关问题 www.myexceptions.ne ...

  6. python框架 mysql数据库_在Python的框架中为MySQL实现restful接口的教程

    最近在做游戏服务分层的时候,一直想把mysql的访问独立成一个单独的服务DBGate,原因如下: 请求收拢到DBGate,可以使DBGate变为无状态的,方便横向扩展 当请求量或者存储量变大时,mys ...

  7. 在matlab中导入excel,Matlab导入Excel文件中的数据的详细教程分享

    操作Matlab时还不会导入Excel文件中的数据?本文就介绍了Matlab导入Excel文件中的数据的操作内容,想要学习的朋友可以看一看下文哦,相信对大家会有所帮助的. 直接点击鼠标操作导入数据 打 ...

  8. 【中科微北斗+GPS模块经纬度数据解析详细教程-附免费代码工程】

    中科微北斗+GPS模块经纬度数据解析详细教程-附免费代码工程 简介 准备工作 PC端需要用到的工具 代码下载地址 GD32F103C8T6最小系统板 代码实现 GD32串口引脚定义如下: 串口的初始化 ...

  9. python redis 消息队列_Python的Flask框架应用调用Redis队列数据的方法

    任务异步化打开浏览器,输入地址,按下回车,打开了页面.于是一个HTTP请求(request)就由客户端发送到服务器,服务器处理请求,返回响应(response)内容. 我们每天都在浏览网页,发送大大小 ...

最新文章

  1. 量子计算机就要来了,它真的能改变世界吗?
  2. SecureCRT连接linux,vim颜色显示问题
  3. keras从入门到放弃(八)过拟合问题
  4. 算法导论笔记:06堆排序
  5. pythonweb啥意思_python-web-guide
  6. sqlserver聚合索引(clustered index) / 非聚合索引(nonclustered index)的理解
  7. python不是内部或外部命令
  8. mina mysql_Mina源码阅读笔记(四)—Mina的连接IoConnector2
  9. 想法独特 上半年最具特色摄像头集锦
  10. 数据结构C语言版 学习整理
  11. 如何下载Django 离线文档?
  12. new115.com dz.html,超实用的HTML代码段(赵荣娇)
  13. 此计算机未连接到网络.单击以连接,此计算机无法连接到家庭组win7
  14. windows11切换输入法的快捷键是什么?win11怎样修改输入法快捷键
  15. AttributeError: Can‘t get attribute ‘SPPF‘ on <module ‘models.common‘ from ‘D:\\ModelTest\\yolov5-5
  16. 手把手教你架设电影服务器
  17. 数字图像处理学习之路:图像变换(一)
  18. 住宅园区光纤布线案例
  19. shell脚本循环执行任务的脚本
  20. 设计模式之创建型——工厂模式(3种)

热门文章

  1. 探索区块链-挖框体验
  2. 区别ie8和ie9的方法
  3. 初学数位DP--hdu 2089
  4. ExtJS实现完美Grid(2)--分组统计
  5. NHibernate.Profiler 使用教程
  6. python从零基础到项目实战怎么样-2018完整Python零基础到项目精通的学习书籍
  7. python 画三维函数图-如何用Matplotlib 画三维图的示例代码
  8. python手机版怎么用-QPython,一个在手机上运行Python的神器
  9. python和c哪个好学-C/C++和Python哪个更有前景?
  10. python中国大学排名爬虫写明详细步骤-python爬虫爬取2020年中国大学排名