首页 > 其他分享 >05.请求与响应 处理响应信息

05.请求与响应 处理响应信息

时间:2023-11-19 17:55:59浏览次数:33  
标签:__ 返回 请求 05 Flask app 响应 name

请求与响应 - 处理响应信息

针对于后端服务,需要针对请求返回对应的响应信息。

响应信息可以响应很多类型的信息类型。常见的比如文本类型,还有非常通用的 JSON 数据。

在 Flask 中,可以使用视图函数来处理接口请求并生成相应的响应。而且 Flask 提供了多种方式来构建和返回接口响应。

接口响应常见类型

  • 文本型
  • 元组
  • JSON
  • HTML
  • 额外数据

返回文本类型

首先来看最简单的类型,返回一个文本数据。

比如现在编写一个接口,设定路由为 /text,请求方法为默认的 GET 请求。返回一串文本信息。

from flask import Flask

# 创建 Flask 应用程序实例
app = Flask(__name__)


# 定义路由和视图函数
@app.route('/text')
def text_res():
return '返回文本'


# 运行应用程序
if __name__ == '__main__':
app.run()

示例中,视图函数 text_res() 直接返回一个字符串 '返回文本',Flask 将自动将其封装成一个纯文本响应并发送给客户端。打开浏览器,就可以看到接口返回的文本内容。

此外,打开浏览器开发者工具 Network 面板查看这个接口,可以注意到 Response Headers 中的Content-Type 是 text/html; charset=utf-8

返回元组类型

除了文本,接口还可以返回元组格式。

元组格式包含 3 个参数类型。第一个是 response 对象,第二个是响应状态码,第三个是响应头信息。也可以只填写 2 个返回信息。比如 (response, status) 结合,还有 (response, headers) 结合。

例如:如果 3 个返回数据都添加响应信息。

from flask import Flask

# 创建 Flask 应用程序实例
app = Flask(__name__)


@app.route('/tuple')
def tuple_res():
return "你好呀", 200, {"hogwarts": "Harry"}

# 运行应用程序
if __name__ == '__main__':
app.run()

可以看到响应状态码为 200,响应头信息中包含了 Hogwarts 这个字段。

返回 JSON

在前后端分离开发的实践中,后端提供的接口响应信息基本都为通用的 JSON 格式。

返回 JSON 类型的响应数据有两种方法。

  1. 第一种是使用 jsonify() 方法,此方法支持,直接传入一个字典,也支持通过关键字参数传递。

# 返回json
from flask import Flask, jsonify

# 创建 Flask 应用程序实例
app = Flask(__name__)


@app.route('/json')
def get_json():
# jsonify({'status': 0})
return jsonify(status=1, name="lily", age=20)

# 运行应用程序
if __name__ == '__main__':
app.run()

  1. 第二种方法就是直接返回字典,在 Flask 1.1 版本之后,直接返回 python 的字典类型时,Flask 会调用 jsonify() 方法。

# 返回字典
from flask import Flask

# 创建 Flask 应用程序实例
app = Flask(__name__)

# 定义路由和视图函数
@app.route('/dict')
def get_dict():
return {'status': 0}


# 运行应用程序
if __name__ == '__main__':
app.run()

以上 /json 和 /dict 路由的响应信息的 Content-Type 均为 application/json

返回 HTML

接口还可以直接返回 HTML。返回 HTML 主要使用的是模板渲染技术。

from flask import Flask, render_template

# 创建 Flask 应用程序实例
app = Flask(__name__)

@app.route('/html')
def get_html():
# 调用render_template方法,传入html 文件的名称。
# 注意html文件必须在 templates 目录下
return render_template('demo.html')

# 运行应用程序
if __name__ == '__main__':
app.run()

可以在 templates 目录下新建 demo.html 文件。

<!--
html文件必须在templates目录下
/application.py
/templates
/demo.html
-->
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=edge"/>
<meta name="viewport" content="width=device-width, initial-scale=1.0"/>
<title>Hogwarts</title>
</head>
<body>
<h1>测试开发</h1>
</body>
</html>

浏览器中访问 /html 路由,发现页面中展示了 测试开发

返回额外数据

在构造响应的过程中,除了构造响应体,响应头,响应状态码等,可能还要添加其他的响应信息。比如需要添加 cookie,则可以使用 make_response() 方法。

返回额外数据

在构造响应的过程中,除了构造响应体,响应头,响应状态码等,可能还要添加其他的响应信息。比如需要添加 cookie,则可以使用 make_response() 方法。

from flask import Flask, render_template, make_response

# 创建 Flask 应用程序实例
app = Flask(__name__)

# 定义路由和视图函数
@app.route('/')
def index():
resp = make_response(render_template('demo.html'))
# 设置cookie
resp.set_cookie('username', 'the username')
# 设置响应头信息
resp.headers["hogwarts"] = "Hary"
return resp


# 运行应用程序
if __name__ == '__main__':
app.run()

浏览器中访问 http://127.0.0.1:5000 路由,发现页面中展示 霍格沃兹测试开发。且响应头信息中包含 Hogwarts 字段,值为 Hary。Set-Cookie 中包含设置的 Cookie 信息。

标签:__,返回,请求,05,Flask,app,响应,name
From: https://www.cnblogs.com/csfsz/p/17842338.html

相关文章

  • 8051单片机:毕业自b站大学
    前言觉得痛苦、好像做不好是因为没花够时间查资料、调试(调试能力太重要了,一定要好好积累;其实也是分析问题解决问题的过程,算是mini科研),没有理解透彻。另外就是关注到别人的胜负或者说成绩了,别人的掌握情况重要也不重要。多关注自己的掌握情况、花费的时间、是否真的理解并思考过......
  • GET和POST的请求的区别
    传递的参数不同,POST传递的参数在requestbody中,GET传递的参数在url后拼接GET请求一般用于查询,POST一般用于提交某种信息进行某些修改操作POST相对GET请求安全GET请求会被浏览器主动缓存,POST不会,要手动设置GET请求长度有限制,POST没有......
  • 2023-2024-1 20231405《计算机基础与程序设计》第八周学习总结
    2023-2024-120231405《计算机基础与程序设计》第八周学习总结作业信息作业属于哪个课程https://edu.cnblogs.com/campus/besti/2023-2024-1-CFAP作业要求在哪里https://edu.cnblogs.com/campus/besti/2023-2024-1-CFAP/homework/13009作业的目标自学《计算......
  • P7907 [Ynoi2005] rmscne 题解
    P7907[Ynoi2005]rmscne题解退役前的最后一篇题解,献给Ynoi。再见了各位。题目大意给定一个长度为\(n\)的序列和\(m\)次查询,对于每次查询,给定\(l,r\),求出一个最短的子区间\([l',r']\),满足所有在区间\([l,r]\)中出现的数也在\([l',r']\)中出现过。题解题还是很......
  • axios向后台springboot服务器发送请求时出现的错误
    this.$axios.post("http://localhost:8080/changeExamStatus?billID="+this.tableData[index].billID).then((response)=>{if(response.data.code==1){alert("第"+(index+1)+"项申请单审核成功");}......
  • 05. 视图
    一、什么是视图函数  视图函数,简称视图,是一个Python函数,它接收Web请求并返回Web响应。响应可以是一个HTML文件、一个重定向、一个404错误、一个XML文档、或者一张图片等等,它可以是任何东西。无论视图本身包含什么逻辑,都要返回响应。逻辑处理代码写在哪里都可以,只要......
  • P1605 迷宫
    题目描述给定一个\(N\timesM\)方格的迷宫,迷宫里有\(T\)处障碍,障碍处不可通过。在迷宫中移动有上下左右四种方式,每次只能移动一个方格。数据保证起点上没有障碍。给定起点坐标和终点坐标,每个方格最多经过一次,问有多少种从起点坐标到终点坐标的方案。输入格式第一行为三......
  • AJAX手写JQuery框架封装AJAX请求和常见方法实现项目功能省市联动查询效果------AJAX
    建立一个SQL表CREATETABLEt_stu(idBIGINTAUTO_INCREMENTPRIMARYKEY,usernameVARCHAR(255),ageINT,addressVARCHAR(255));INSERTINTOt_stu(id,username,age,address)VALUES(NULL,"zhangsan",15,"广州")INSERTINTOt_stu(id,username,age,address)......
  • session源码、闪现、请求扩展
    session源码'''1app.session_interface默认是某个类的对象,以后全局对象session,就是SecureCookieSessionInterface()的对象2请求来了,会执行这个对象的:open_session方法3请求走了,会执行这个对象的:save_session方法4找出上面讲的--》读源码--》app.run()---->run_simp......
  • session源码,闪现,请求扩展
    1session源码......