Flask Response

栏目: Python · 发布时间: 5年前

内容简介:flask jsonify()函数返回json响应这时候content-Type=application/json如果用python的json.dumps()函数

flask jsonify()函数返回json响应

app = Flask(__name__)
@app.route('/json/<name>')
def index(name):
    return jsonify({'Hello':name})

这时候content-Type=application/json

如果用 python 的json.dumps()函数

@app.route('/dumps/<name>')
def py(name):
    return json.dumps({'Hello':name})

这时候content-Type=text/html; charset=utf-8。如果选择响应的格式的话,return json.dumps({'Hello':name}),{'Content-Type':'application/json'} 那么content-Type=application/json就会响应json格式

flask Response响应类实际上来自Werzeug中的Response类,它继承的是python的BaseResponse类

我们可以自定义响应

>>> from flask import Flask
>>> app = Flask(__name__)
>>> app.make_response(("<h1>Hello word</h1>",201))
<Response 16 bytes [201 CREATED]>

make_response接收一个参数,返回信息和状态码都在一个元组里

Response类定义:

class Response:
    charset = 'utf-8'
    default_status = 200
    default_mimetype = 'text/html'

    def __init__(self, response=None, status=None, headers=None,
                 mimetype=None, content_type=None, direct_passthrough=False):
        pass

    @classmethod
    def force_type(cls, response, environ=None):
        pass

我们可以自定义Response的子类,对他的行为做出一些改变,Flask类的response_class属性可以改变响应类。

from falsk import FLask, Response

calss MyResponse(Response):
    default_mimetype = 'application/xml'  #修改内容类型
  
class Myfalsk(Flask):
    response_class = Myresponse
    
@app.route('/')
def index():
    return '''<?xml version='1.0'encoding="UTF-8"?>
    <person>
        <name>Yang</name>
    </person>
    '''
如果想要其他的内容类型,可以设置Content-Type的值:
return "{'name':'yang'}",{'Content-Type'='application/json'}

重写Response类来过滤Json格式的内容格式:

class Myresponse(Response):
    @classmethod
    def force_type(cls, response, environ=None):
        if isinstance(response, dict):
            response = jsonify(response)
        return super().force(response, environ)

重写forec_type来自定义对未知返回对象的处理。falsk只知道对字符串和二进制类型进行处理响应,其他位置类型比如字典都通过forec_type函数进行处理,我们定义的如果返回的是dict类型那么用flask的jsonify函数转换成json内容类型。


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

The Four

The Four

Scott Galloway / Portfolio / 2017-10-3 / USD 28.00

NEW YORK TIMES BESTSELLER USA TODAY BESTSELLER Amazon, Apple, Facebook, and Google are the four most influential companies on the planet. Just about everyone thinks they know how they got there.......一起来看看 《The Four》 这本书的介绍吧!

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具

Markdown 在线编辑器
Markdown 在线编辑器

Markdown 在线编辑器