• Flask实战第6天:视图函数Response返回值


    视图函数的返回值会被自动转换为一个响应对象,Flask的转换逻辑如下:

    如果返回的是一个合法的响应对象,则直接返回

    可以使用make_response函数来创建Response对象,这个方法可以设置额外的数据,比如cookie、header信息等

    rom flask import Flask
    from flask import make_response
    
    app=Flask(__name__)
    
    
    @app.route('/about/')
    def about():
        return make_response('about page')

    如果返回的是一个字符串,那么Flask会重新创建一个werkzeug.wrappers.Response对象,Response将该字符串作为主体,状态码为200,MIME类型为text/html,然后返回该Response对象

    @app.route('/about/')
    def about():
        return 'about page'
    from werkzeug.wrappers import Response
    
    app=Flask(__name__)
    
    
    @app.route('/about/')
    def about():
        resp=Response(response='about page',status=200,content_type='text/html;charset=utf8')
        return resp

    如果返回的是一个元组,元组中的数据类型是(response,status,headers)。status会覆盖默认的200状态码,headers可以是一个列表或者字典作为额外的消息头


    from flask import Flask
    from flask import make_response
    from werkzeug.wrappers import Response

    app=Flask(__name__)


    @app.route('/about/')
    def about():
    return 'about page',200,{'server':'xiaomingyan'}


    if __name__ =='__main__':
    app.run(host='127.0.0.1',port=8080) # 运行,指定监听地址为127.0.0.1:8080
    
    

     

    如果以上条件都不满足,Flask会假设返回值是一个合法的WSGI应用程序,并通过Response.force_type(rv,request.environ)转换为一个请求对象

    我们尝试返回一个字典,字典不满足上面的三个条件,因此进入第4步,但是字典也不是一个合法的WSGI应用程序,因此不是一个可请求对象。产生异常!

    @app.route('/about/')
    def about():
        return {'name':'heboan'}

    如果我们想把所有的URL都发送 JSON数据,那么我们就可以执行响应

    自定义响应必须满足3个条件

    1、必须继承Response类

    2、实现类方法force_type(cls, response, environ=None)

    3、必须制定app.response_class为你定义的Response

    我们可以定义一个叫做JSONResponse的类来代替Flask自带的Response类

    #coding=utf-8
    
    from flask import Flask
    from werkzeug.wrappers import Response
    from flask import jsonify
    
    
    app=Flask(__name__)
    
    class JSONResponse(Response):
        default_mimetype = 'application/json'
        @classmethod
        def force_type(cls, response, environ=None):
            if isinstance(response,dict):
                response=jsonify(response)
                return super(JSONResponse,cls).force_type(response,environ)
    app.response_class=JSONResponse
    @app.route('/about/')
    def about():
        return {'name':'xiaomingyan'}
    
    if __name__ =='__main__':
        app.run(host='127.0.0.1',port=8080) # 运行,指定监听地址为127.0.0.18080

    2019-01-1717:42

    UP UP!!!

  • 相关阅读:
    Android Action Bar简介
    Android UX & UI 最佳实践: 设计有效的导航
    Android Design Principles
    Android 4.4 KitKat 新特性
    Android 尺寸单位转换和屏幕适配相关
    Android UI线程和非UI线程
    初探机器学习之使用百度EasyDL定制化模型
    初探机器学习之使用百度AI服务实现图片识别与相似图片
    初探机器学习之推荐系统的基础知识
    熊逸《唐诗50讲》壮心篇
  • 原文地址:https://www.cnblogs.com/xinbaby2358/p/10283539.html
Copyright © 2020-2023  润新知