flask第十五篇——Response

从这一节开始,我就要开始讲关于模板的知识了。先来学习一下Response的相关知识。

所有返回前台的内容其实都应该是Response的对象或者其子类,我们看到如果返回的是字符串直接可以写成return u'字符串内容'的形式,但是其实这个字符串也是经过了Response包装的:return Response(u'字符串') 我们看一段代码:

# coding: utf-8

from flask import Flask, Response

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

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

@app.route('/login/')
def login():
    return Response(u'login')

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

代码里我新建了一个login函数,返回的就是用Response包装后的字符串,访问地址可以看到页面打印了login

我们有时候需要返回数组、字典之类的数据,但是数组或者字典这些数据是不能直接return的。这个时候怎么办呢?答案就是你必须将数组或字典转换成json后再返回(这就是为什么我们做接口测试的时候传参前用json.loads()将字符串转换成字典的原因了),因为json就是一个字符串

数组或字典转换成json的函数叫做jsonify,你需要先导入from flask import jsonify或者像船长下面代码里写的那样,一下子导入好几个库:

# 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)

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

上面代码里`dict1`的数据类型是一个字典,我们通过`jsonify()`将其转换成了`json`,就可以成功返回了,去页面,看到:

除了字符串以外,还可以返回元组,但是返回元组是有要求的,元组内容包括三个参数:responsestatus_codeheaders,其中:

  • response指页面打印信息,可以是字符串或Response对象
  • status_code指状态码,成功200,找不到页面404等等
  • headers指信息头
# 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"}

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

看上面代码的myset函数,我return了一个元组(单个值的元组可以不写括号,而且如果你加上括号,pycharm会有黄线提醒你remove redundant parentheless,意思就是去掉多余的括号)。然后我们到页面访问/set/这个页面,打开F12就是开发者工具,然后刷新页面:

然后看开发者工具:

这就是一个返回元组的例子了。

明天我们继续Response的知识。

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

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

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

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏python3

python类(class)

类(Class): 用来描述具有相同的属性和方法的对象的集合。它定义了该集合中每个对象所共有的属性和方法。对象是类的实例,把所有相似的功能都封装到一个类里,最理...

1143
来自专栏用户2442861的专栏

【深入Java虚拟机】之四:类加载机制

转载请注明出处:http://blog.csdn.net/ns_code/article/details/17881581

641
来自专栏Small Code

Python中strptime的简单使用

strptime是python datetime库中的函数,用于将一个日期字符串转成datetime日期格式便于后期处理,使用格式为datetime.strpt...

2368
来自专栏Laoqi's Linux运维专列

nginx的location优先级

3357
来自专栏友弟技术工作室

bash脚本编程

1943
来自专栏用户2442861的专栏

java类加载过程

转载请注明出处:http://blog.csdn.net/ns_code/article/details/17881581

2111
来自专栏Java成长之路

五、Java对象的访问定位

Java对象在访问的时候,我们需要通过java虚拟机栈的reference类型的数据去操作具体的对象。由于reference类型在java虚拟机规范中只规定了一...

1932
来自专栏码字搬砖

JVM内存模型之栈

内容 HotSpot将java虚拟机栈与本地方法栈合并成一个了(操作系统中的栈是通过硬件ESP、EBP寄存器来实现的)。虚拟机的栈在细分,分为: 当前栈...

1223
来自专栏Java学习网

JavaScript依赖注入的实现思路

JavaScript依赖注入的实现思路 如今各个框架都在模块化,连前端的javascript也不例外。每个模块负责一定的功能,模块与模块之间又有相互依赖,那么问...

2196
来自专栏GreenLeaves

C#核编之一个简单的C#程序

构建一个简单的C#应用程序需要注意一下几点: 1、C#要求所有的程序逻辑都包含在一个类型定义中   --->这里的类型指的是(类,接口,结构,枚举,委托中的一个...

20110

扫码关注云+社区

领取腾讯云代金券