Flask response响应

阳光穿透心脏的1/2处 2023-01-17 06:30 286阅读 0赞

引言

客户端发送 http 请求给 Flask程序,Flask 调用视图函数后,会将其返回值作为响应的内容。大多情况下,响应就是一个简单的字符串,作为 Html 页面回送客户端。

http 协议需要的不仅是作为请求响应的字符串。http 响应中有一个很重要的部分是状态码,Flask设为200,代表请求已被成功处理。

response响应

元组形式响应

如果视图函数返回的响应还需要使用不同的状态码,那么可以把数字代码作为第二个返回值,添加到响应文本之后

  1. from flask import Flask
  2. app = Flask(__name__)
  3. # 以元组形式返回响应信息
  4. @app.route("/index")
  5. def index():
  6. # 响应体 状态码
  7. return "index page", 400

视图函数返回的响应还可以接受第三个参数,响应头也可以继续放在后面返回,例如:

  1. from flask import Flask
  2. app = Flask(__name__)
  3. # 以元组形式返回响应信息
  4. @app.route("/index")
  5. def index():
  6. header_dict = {
  7. "name": "jack",
  8. "age": 22
  9. }
  10. header_list = [("name", "hui"), ("age", 21)]
  11. # 响应体 状态码 响应头
  12. return "index page", 400, header_dict
  13. # return "index page", 400, header_list

但响应头信息要用一个字典或列表包装起来,字典好理解,列表里面则是以元组形式存储响应头信息。这里返回的只是做个例子,真正返回的时候,要合理设置响应头信息,例如

  1. header_dict = {
  2. "Content-Type": " text/html; charset=utf-8",# 响应返回的数据类型
  3. "Set-Cookie": "name=hui; Path=/" # 响应设置cookie
  4. }
  5. return "index page", 200, header_dict

浏览器开发者工具查看响应信息

查看响应体信息

切记:以元组形式返回,位置不能够乱,返回值

  • 第一个对应响应体
  • 第二个对应状态码
  • 第三个对应响应头

make_response函数

如果不想返回由1个、2个或3个值组成的元组,Flask视图函数还可以返回 Response 对象。make_response 函数可接受1个、2个或3个参数(和视图函数的返回值一样),并返回一个Response对象。看看到底如何使用

  1. from flask import Flask, make_response
  2. app = Flask(__name__)
  3. # mk_response 设置响应信息
  4. @app.route("/info")
  5. def info():
  6. resp = make_response("info page")
  7. resp.status = "666 ithui"
  8. resp.headers["name"] = "hui"
  9. resp.headers["age"] = 21
  10. return resp

注意:make_response() 对象设置状态码时必须字符串,不要写成了数字

返回json格式数据

  1. import json
  2. from flask import Flask, make_response
  3. app = Flask(__name__)
  4. @app.route("/json")
  5. def resp_json():
  6. data = {
  7. "name": "hui",
  8. "age": 21
  9. }
  10. json_str = json.dumps(data)
  11. headers = { "Content-Type": "application/json"}
  12. return json_str, 200, headers

你可以借助 json 模块进行数据 json化,但一般返回json数据要设置前端返回的数据类型,Flask默认的是text/html,因此我们还需在单独设置响应体内容类型。

由于json格式数据在Web开发中使用频繁,在 Flask 中专门提供了 jsonify() 函数进行 json数据的响应

具体使用如下

  1. from flask import Flask, jsonify
  2. app = Flask(__name__)
  3. @app.route("/json")
  4. def resp_json():
  5. data = {
  6. "name": "hui",
  7. "age": 21
  8. }
  9. return jsonify(data)
  10. # return jsonify(name="jack", age=20)

jsonify()可以接收一个字典,也可以 key-value 形式来构造 json 数据。这样就方便许多

其他特殊响应

redirect() 重定向

有一种名为重定向的特殊响应类型。这种响应类型没有页面文档,只告诉浏览器一个新地址用以加载新页面

  1. from flask import Flask, redirect
  2. app = Flask(__name__)
  3. # 自己设置重定向信息
  4. @app.route('/baidu')
  5. def red_baidu():
  6. resp = make_response()
  7. resp.status = "302"
  8. resp.headers['Location'] = "http://www.baidu.com"
  9. return resp
  10. # redirect 响应重定向
  11. @app.route("/csdn")
  12. def red_csdn():
  13. csdn_url = "https://blog.csdn.net/qq_43629857"
  14. return redirect(csdn_url)

重定向的经常使用 302 状态码表示,指向的地址由 Location 首部提供。由于使用频繁,Flask 提供了辅助函数 redirect(),用于生成这种响应。

abort() 中断

abort()接收一个状态码参数

  1. from flask import Flask, request, abort
  2. app = Flask(__name__)
  3. # abort中断
  4. # http://127.0.0.1:5000/login?name=hui&pwd=123
  5. @app.route("/login", methods=['GET'])
  6. def login():
  7. name = request.args.get("name")
  8. pwd = request.args.get("pwd")
  9. if name != "hui" or pwd != "123":
  10. abort(404)
  11. return "登录成功"

一般这个 abort() 函数都会配合错误信息处理装饰器 app.errorhandler() 一起使用,如下:

  1. # 处理404状态错误
  2. @app.errorhandler(404)
  3. def handle_404_err(err):
  4. return f"404 错误信息 {err}"
  5. # 处理500状态错误
  6. @app.errorhandler(500)
  7. def handle_500_err(err):
  8. return f"500 服务器错误 {err}"
  9. # abort中断
  10. # http://127.0.0.1:5000/login?name=hui&pwd=123
  11. @app.route("/login", methods=['GET'])
  12. def login():
  13. name = request.args.get("name")
  14. pwd = request.args.get("pwd")
  15. if name != "hui" or pwd != "123":
  16. abort(404)
  17. return "登录成功"

源代码

源代码已上传到 Gitee HuiDBK/FlaskBasic - 码云 - 开源中国 (gitee.com),欢迎大家来访。

✍ 码字不易,还望各位大侠多多支持❤️。

公众号

新建文件夹X

大自然用数百亿年创造出我们现实世界,而程序员用几百年创造出一个完全不同的虚拟世界。我们用键盘敲出一砖一瓦,用大脑构建一切。人们把1000视为权威,我们反其道行之,捍卫1024的地位。我们不是键盘侠,我们只是平凡世界中不凡的缔造者 。

发表评论

表情:
评论列表 (有 0 条评论,286人围观)

还没有评论,来说两句吧...

相关阅读