flask第十六篇——Response【2】

今天来介绍自定义返回对象:

现在我们假定有一个需求:所有的视图函数都要返回json格式的对象 我们先看一下Response的源码:

发现只有一行default_mimetype='text/html',所以我们需要重写Response类;当然我们需要知道常用的数据类型:

  • text/html(默认的,html文件)
  • text/plain(纯文本)
  • text/css(css文件)
  • text/javascript(js文件)
  • application/x-www-form-urlencoded(普通的表单提交)
  • multipart/form-data(文件提交)
  • application/json(json传输)
  • application/xml(xml文件)
# coding: utf-8

from flask import Flask, Response, jsonify

app = Flask(__name__)  # type: Flask
app.debug = True

@app.route('/')
def hello_world():
    return 'Hello World!'

@app.route('/login/')
def login():
    dict1 = {"name": "Warren"}
    return jsonify(dict1)
    
@app.route('/set/')
def myset():

    return u'返回元组', 200, {"name": "Warren"}


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('/jsontext/')
def jsontext():
    return {"name": "Warren"}


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

代码说明,以上代码重写了force_type方法,那么什么时候代码会调用force_type方法呢?如果返回的字符串不符合下面三种数据类型,就会调用该方法,这三种数据类型是字符串元组response

上面代码里jsontext函数直接返回dict类型数据,本来是不可以的,但是因为我们重写了force_type方法,现在这个函数就可以直接返回这个数据了:

原文发布于微信公众号 - 自动化测试实战(gh_839e78b6ba28)

原文发表时间:2018-03-26

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏从零开始学自动化测试

Selenium2+python自动化37-爬页面源码(page_source)

前言 有时候通过元素的属性的查找页面上的某个元素,可能不太好找,这时候可以从源码中爬出想要的信息。selenium的page_source方法可以获取到页面源码...

3657
来自专栏听雨堂

事件处理需小心

        两个对象,A对象和B对象,A对象的事件需要在B中的一个函数来处理,B会不断创建,每次创建时就把A对象作为参数传给B的构造函数,B在构造函数中将处...

20810
来自专栏Python小屋

回调函数原理与Python实现

回调函数的定义与普通函数并没有本质的区别,但一般不直接调用,而是作为参数传递给另一个函数,当另一个函数中触发了某个事件、满足了某个条件时就会自动调用回调函数。下...

3928
来自专栏用户2442861的专栏

Java类加载器深入探索

林炳文Evankaka原创作品。转载请注明出处http://blog.csdn.net/evankaka

951
来自专栏运维技术迷

Redis全局命令

redis有5种数据结构,他们是键值对中的值,对于键来说有一些通用的命令。 查看所有键 语法:keys * [root@vultr ~]# redis-cli ...

3457
来自专栏前端侠2.0

ng6的ng-template的一个用法 原

但第一种方法无法插入name的值。  参数是context,不明白它的context是要传递什么进去

5533
来自专栏xingoo, 一个梦想做发明家的程序员

【Spring开发】—— Spring注入静态变量

  今天碰到一个问题,我的一个类提供了几种静态方法,静态方法需要另外一个类的实例提供处理,因此就写出了这样的代码: 1 Class aa{ 2 priv...

2796
来自专栏JetpropelledSnake

Python学习笔记之Python对象反射、类反射、模块反射

2244
来自专栏我的博客

php命名空间详解

1、命名空间概述 从广义上来说,命名空间是一种封装事物的方法。在很多地方都可以见到这种抽象概念。例如,在操作系统中目录用来将相关文件分组,对于目录中的文件来说,...

3298
来自专栏c#开发者

[原创]PipelineTools 文件传输工具

功能模块只有 1/文件目录-〉文件目录 2/文件目录-〉MSMQ 3/MSMQ-〉MSMQ 4/MSMQ -〉文件目录 在传输MSMQ是文件不能超过4M 下载文...

3687

扫码关注云+社区

领取腾讯云代金券