zoukankan      html  css  js  c++  java
  • Flask_响应(四)

    响应即视图函数的返回值,前面的例子的返回值都很简单,直接返回值。但是Flask Http协议的返回值中通常还会有以下几种不同的方式。

    一、return元组

    通过return一个元组构造响应信息。

    语法如下:

    return (显示的信息,状态码,返回报文首部信息)   # 括号可缺省
    # 以元组的响应
    @app.route("/tuple/")
    def response_tuple():
        # 最简单的响应
        # return "响应成功"
    
        # 状态码和首部可缺省。状态码缺省时,默认200
        # return "响应成功", 200
        # return "响应成功", {"token": 666}
    
        # 状态码可自定义
        # return "响应成功", 666      # 使用非标准http状态码,浏览器中会显示UNKNOWN
        # return "响应成功", "666 good"
    
        # 设置多个响应首部信息
        return "响应成功", {"token": 666, "uid": 777}

    二、jsonify函数

    jsonify函数是flask封装的函数,用于将数据转换成json字符串,并修改一些headers中的信息。

    from flask import jsonify
    import json
    
    
    @app.route("/json/")
    def response_json():
        data = {"name": "zhangsan", "age": 18}
    
        # 返回json数据的两种方式
    
        # 1、使用json包转换数据
        # json.dumps(dict)  将字典转换为json字符串
        # json.loads(json字符串)   将json字符串转为字典
        # 1.1 将字典类型数据转换为json字符串
        # data_json = json.dumps(data)    # {"name": "zhangsan", "age": 18}
        # print(type(data_json))          # <class 'str'>
        # 1.2 使用元组响应的方式修改Content-Type的值为json,如果不改值为text/html; charset=utf-8
        # return data_json, 200, {"Content-Type": "application/json"}
    
        # 2、使用flask封装的jsonify函数
        # 2.1 数据能以键值对的方式传入
        # data_json = jsonify(name="张三", age="18")
        # 2.2 数据也能以字典的方式传入
        data_json = jsonify(data)
        return data_json

    三、make_response函数

    make_response 函数用于自定义响应信息,与元组相似。

    from flask import jsonify, make_response
    
    @app.route("/response/")
    def response():
        data = {"name": "zhangsan", "age": 18}
        # 自定义响应文本
        resp = make_response(jsonify(data))
        # 自定义响应首部
        resp.headers["token"] = "aaaaa"
        # 自定义响应状态码
        resp.status = "666 status_description"
        # 自定义cookie
        resp.set_cookie("uid", "888")
        return resp

    四、abort函数

    abort函数通常用来抛出异常,把控制权交给web服务器返回异常,比如:abort(404),传入的状态码只能使用http标准状态码。

    演练代码如下:

    from flask import abort, Response
    @app.route(
    "/login/") def login(): username = request.args.get("username") password = request.args.get("password") if username != "admin" or password != "admin": # 使用abort函数可以立即终止视图函数的执行,类似于return,但是abort可以返回特定信息给前端 # 1、返回标准的http状态码。比如200、300、400、500,若返回600则报错 abort(403) # 2、传递响应体信息,但是这与return效果一样,所以abort通常用于返回状态码 # resp = Response("login failed") # abort(resp) return "login success"

    五、errorhandler装饰器

     errorhandler装饰器用于自定义异常响应信息

    # 使用errorhandler装饰器自定义异常处理
    # 自定义404状态的信息
    @app.errorhandler(404)
    def error(msg):
        return F"访问的页面不存在,{msg}"

    附码:

    from flask import Flask, request, abort, Response, jsonify, make_response
    import json
    
    app = Flask(__name__)
    
    
    # 以元组的响应
    @app.route("/tuple/")
    def response_tuple():
        # 最简单的响应
        # return "响应成功"
    
        # 状态码和首部可缺省。状态码缺省时,默认200
        # return "响应成功", 200
        # return "响应成功", {"token": 666}
    
        # 状态码可自定义
        # return "响应成功", 666      # 使用非标准http状态码,浏览器中会显示UNKNOWN
        # return "响应成功", "666 good"
    
        # 设置多个响应首部信息
        return "响应成功", {"token": 666, "uid": 777}
    
    
    # abort函数
    @app.route("/login/")
    def login():
        username = request.args.get("username")
        password = request.args.get("password")
        if username != "admin" or password != "admin":
            # 使用abort函数可以立即终止视图函数的执行,类似于return,但是abort可以返回特定信息给前端
            # 1、返回标准的http状态码。比如200、300、400、500,若返回600则报错
            abort(403)
            # 2、传递响应体信息,但是这与return效果一样,所以abort多用于返回状态码
            # resp = Response("login failed")
            # abort(resp)
        return "login success"
    
    
    # 使用errorhandler装饰器自定义异常处理
    # 自定义404状态的信息
    @app.errorhandler(404)
    def error(msg):
        return F"访问的页面不存在,{msg}"
    
    
    # 使用jsonify函数返回json数据
    @app.route("/json/")
    def response_json():
        data = {"name": "zhangsan", "age": 18}
    
        # 返回json数据
        # 1、使用json包转换数据
        # json.dumps(dict)  将字典转换为json字符串
        # json.loads(json字符串)   将json字符串转为字典
        # 1.1 将字典类型数据转换为json字符串
        data_json = json.dumps(data)    # {"name": "zhangsan", "age": 18}
        # print(type(data_json))          # <class 'str'>
        # 1.2 使用元组响应的方式修改Content-Type的值为json,如果不改值为text/html; charset=utf-8
        # return data_json, 200, {"Content-Type": "application/json"}
    
        # 2、使用flask封装的jsonify函数
        # 2.1 数据能以键值对的方式传入
        # data_json = jsonify(name="张三", age="18")
        # 2.2 数据也能以字典的方式传入
        data_json = jsonify(data)
        return data_json
    
    
    # 使用 make_response 函数自定义响应信息
    @app.route("/response/")
    def response():
        data = {"name": "zhangsan", "age": 18}
        # 自定义响应文本
        resp = make_response(jsonify(data))
        # 自定义响应首部
        resp.headers["token"] = "aaaaa"
        # 自定义响应状态码
        resp.status = "666 status_description"
        # 自定义cookie
        resp.set_cookie("uid", "888")
        return resp
    
    
    if __name__ == '__main__':
        app.run()
  • 相关阅读:
    VUE常用传值方式、父传子、子传父、非父子组件传值
    ios10中禁止用户缩放页面
    TCP MSS
    C++11 之 override
    unordered_set
    c++Lambda
    QUIC实现代码分析
    C++11新特性之十:enable_shared_from_this
    c++11 atomic
    How to Write a QUIC Endpoint Program
  • 原文地址:https://www.cnblogs.com/testlearn/p/14097967.html
Copyright © 2011-2022 走看看