Flask Response响应(flask中设置响应信息的方法,返回json数据的方法)

设置响应信息的方法html

 1.  返回自定义的响应头,有两种方式:前端

   (1)  第一种是:视图函数return的时候,使用元组,返回自定义的信息python

          返回的时候的状态码能够自定义信息:"状态码   自定义的信息", web

         例如: 能够把下面代码中的400,改为自定义的状态码:   "666  custom info"json

from flask import Flask
app = Flask(__name__)

@app.route("/index")
def index():
  """
  1. 使用元组,返回自定义的响应信息
  返回响应体,状态码,响应头
  return 多个值时,就会是一个元组的形式
  """
  """
  除了用字典的形式,也能够用字典的形式
  return "index page", 400, {"Itcast": "python", "City": "beijing"}
  """
return "index page", 400, [("Itcast", "python"), ("City", "beijing")]


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

 


访问网页后,能够看到自定义的响应头信息,  固然能够设置标准的响应头信息,根据需求,这是经过元组的方式flask

 

 

 注意,  在return值的时候浏览器

       能够只给前端传响应体和状态码,不传响应头服务器

        但不能够只传响应体和响应头,即有响应头,必需要有状态码app

它是有顺序的,第一个响应体,第二个状态码,第三个响应头,能够从后面省但不可从前面省函数

   (2) 第二种方式:  使用make_response 来构造响应信息(从flask中导入make_response)

          resp =  make_response("响应体")

          resp.status = "状态码,能够是自定义的状态码"

          resp.headers["键"] = "值"   #  经过字典的形式设置响应头

from flask import Flask, make_response

app = Flask(__name__)

@app.route("/index")
def index():

  # 2. 使用make_response 来构造响应信息
  resp = make_response("index page2") # 响应体数据
  resp.status = "999 itcast" # 状态码
  resp.headers["City"] = "ShangHai" # 经过字典的形式添加响应头
return resp


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

 

访问网页看到的结果是同样的

 

 

 2. 给前端返回json数据:

     1. 经过传统的方式,先构造一个字典,而后通过json模块转化为字符串

        ,视图函数返回字符串以及修改响应头的类型接口

      2.经过flask中的 jsonify来进行返回

          有两种方式  第一种是把构造好的字典直接传进去返回便可   return jsonify(构造的字典)

                              第二种是直接在jsonify() 里面进行构造      return jsonify(键=值,键=值) ,其效果是同样的

from flask import Flask, jsonify
import json
 
app = Flask(__name__)
 
 
@app.route("/index")
def index():
    """向前端返回json类型的数据"""
    data = {
        "name": "python",
        "age": 18
    }
    """
        传统的方式去传递
        # json.dumps(字典)  将Python的字典转换为json的字符串
        # json.loads(字符串)  将字符串转换为Python中的字典
        json_str = json.dumps(data)
        # 改变,响应头的类型
        return json_str,200,{"Content-Type":"application/json"}
    """
    '''
        jsonify()的使用
        1.jsonify()帮助转为json数据,并设置响应头 Content-Type 为 application/json
        2. 能够不用提早构造好字典,直接返回,结果是同样的
            return jsonify(City="Beijing",age=20)
    '''
    return jsonify(data)
 
 
if __name__ == '__main__':
    app.run(debug=True)

 


访问网页后:

 

 

 


 

无论咱们使用什么语言开发,既然咱们作的是web,都遵循的是HTTP协议,那么既然遵循这个协议,咱们客户端发送请求,发送的就是Request对象,服务器接收到请求,给咱们返回数据,返回的就是Response对象。

和Request同样,Response一样是一个对象。咱们客户端(浏览器)的request对象发送到服务器端,服务器作出响应,把response对象发送给客户端。咱们也不能把response就认为是咱们看到的五光十色的页面,那只是response中的body的一部分。它还有headers等信息,并且咱们作技术的,服务器端发送出来的response咱们是能够参与其中的,就是咱们能够控制服务器端返回给客户端的是什么。接下来就让咱们来直观感觉一下。

Response直观感觉
咱们先去访问一下网易云音乐的首页,看看网易服务器给咱们返回了的东西大概都有哪些。

首先咱们看一下返回的response的头部信息:有状态码:200,还有一堆属性的东西。以下图:

 

 

 

而后看一下response的body,就是咱们看到的浏览器给咱们渲染成的美好的页面。以下图:

 

 

以上呢,就是一个成熟的服务器给咱们返回来的东西,就是这个response对象。

参与到Response中
首先我在pycharm中建立了个flask项目,而后在templates里面写了个resp.html文件,在  .py 文件中写了路由视图函数等,如图:图中标明信息

这是resp.html文件:

 

 

 

这是.py 文件:

 

 

而后咱们运行,查看结果:发现是否是resp.html中写了什么,这里就显示了什么,由于咱们指定了发送的格式是纯文本,因此浏览器接收到以后就按纯文本处理了。

 

 

咱们看一下具体的response信息:发现咱们成功访问了,而状态码是404,并且类型也是text/plain.这和逻辑不符合,不要紧,这就是由于咱们参与了response的结果。这时候你是否是发现浏览器很傻,你告诉它啥,它就信啥。

 

 

而后咱们修改咱们的代码,把格式和状态码改成正常的。

 

 

而后来看咱们的运行结果:终于像个平时看到的网页了。

 

 

再来看它的response信息:发现咱们告诉浏览器我发过来的格式是html。那浏览器就把刚才的html成功渲染了,而不是纯文本发送过来了。并且状态码也成功的表示为200了。正确了。

 

 

总结:
经过以上简单的小栗子,咱们发现服务器给客户端的response对象咱们是能够参与其中的。并非说咱们写了个html,客户请求过来了,咱们就把html发送过去了。这里不少东西咱们都是能够参与的。

https://blog.csdn.net/wei18791957243/article/details/85161993
http://www.javashuo.com/article/p-ulwixvfa-er.html

相关文章
相关标签/搜索