flask如何返回真正意义上的json字符串?以及中文如何正常显示?
flask中,不能直接return字典,需要把字典转换为json字符串
方式有三种:
1. return str(字典)
2.return json.dumps(字典)
3.return jsonify(字典)
其中,dumps是json模块的方法,jsonify是flask封装的方法
虽然他们返回的都是json字符串,但是是不一样的
0.代码及脚本准备
服务端部分代码
@server.route('/login',methods=['get','post'])
def login():
username = request.values.get('username','').strip()
password = request.values.get('password','').strip()
if username and password:
password = md5_s(password)
sql = 'select id,username from users where username="%s" and password="%s"'%(username,password)
res = op_mysql(sql)
if res:
token = username+str(int(time.time()))
token = md5_s(token)
op_redis(username,token)
response = make_response('{"code":9420, "msg":"恭喜%s,登录成功","token":"%s"}'%(username,token))
response.set_cookie(username,token)
return response
# return '{"code":9420, "msg":"恭喜%s,登录成功","token":"%s"}'%(username,token)
else:
return '{"code":9410,"msg":"用户名或密码不正确"}'
# return json.dumps({"code":9410,"msg":"用户名或密码不正确"},ensure_ascii=False)
# return jsonify({"code":9410,"msg":"用户名或密码不正确"}) # jmeter请求,中文响应乱码;postman请求,中文正常显示
else:
return '{"code":9400,"msg":"用户名和密码不能为空"}'
jmeter脚本
这里用错误的账号和密码来演示

1.返回str(字典)
return '{"code":9410,"msg":"用户名或密码不正确"}'
jmeter响应结果:中文正常显示

浏览器响应

响应头

2.返回json.dumps(字典)
return json.dumps({"code":9410,"msg":"用户名或密码不正确"})
jmeter响应结果:中文未正常显示

msg = "\u7528\u6237\u540d\u6216\u5bc6\u7801\u4e0d\u6b63\u786e"
res = msg.encode('utf-8')
print(res,type(res))
res = msg.encode('utf-8').decode('utf-8')
print(res,type(res))
print(msg)
结果
b'\xe7\x94\xa8\xe6\x88\xb7\xe5\x90\x8d\xe6\x88\x96\xe5\xaf\x86\xe7\xa0\x81\xe4\xb8\x8d\xe6\xad\xa3\xe7\xa1\xae' <class 'bytes'>
用户名或密码不正确 <class 'str'>
用户名或密码不正确
要想中文正常显示,需要加上:ensure_ascii=False
return json.dumps({"code":9410,"msg":"用户名或密码不正确"},ensure_ascii=False)
jmeter响应结果:中文正常显示
浏览器响应

响应头

3.返回jsonify(字典)
return jsonify({"code":9410,"msg":"用户名或密码不正确"})
jmeter响应结果:中文未正常显示

要想中文正常显示,需要加上:server.config['JSON_AS_ASCII'] = False
jmeter响应结果:中文正常显示
浏览器响应

响应头

4.总结
方式一:返回的是: Content-Type:text/html
方式二:返回的是: Content-Type:text/html
方式三:返回的是: Content-Type:application/json
所以,方式三才是真正意义上的json字符串。
flask如何返回真正意义上的json字符串?以及中文如何正常显示?的更多相关文章
- PHP:JSON字符串转换为中文,中文转换为JSON字符串
/** * 中文转换为JSON字符串 * @param $chinese_str 中文:可以包含中文字母数字 * @return string */ function json_encode($chi ...
- Retrofit 2.0 超能实践(三),轻松实现文件/多图片上传/Json字符串
文:http://blog.csdn.net/sk719887916/article/details/51755427 Tamic 简书&csdn同步 通过前两篇姿势的入门 Retrofit ...
- Retrofit 2.0 轻松实现多文件/图片上传/Json字符串/表单
如果嫌麻烦直接可以用我封装好的库:Novate: https://github.com/Tamicer/Novate 通过对Retrofit2.0的前两篇的基础入门和案例实践,掌握了怎么样使用Retr ...
- PHP 将数组转换为JSON字符串<兼容中文>
1 /************************************************************** 2 * 3 * 使用特定function对数组中所有元素做处理 4 ...
- PHP中json序列化后中文的编码显示问题
在接口返回数据中,我们经常会返回json或者xml格式,php的json序列化函数json_encode非常好用,但是默认会把中文编码为ASCII码(注意,很多人认为这是乱码,其实不是),尤其在调试接 ...
- httpclient工具类,post请求发送json字符串参数,中文乱码处理
在使用httpclient发送post请求的时候,接收端中文乱码问题解决. 正文: 我们都知道,一般情况下使用post请求是不会出现中文乱码的.可是在使用httpclient发送post请求报文含中文 ...
- linux下bom头导致的php调用php接口 返回的json字符串 无法转成 数组,即json字符串无法解码的问题
今天很是郁闷,写了一个php接口,返回的是标准的json字符串,但是调用的php 就是无法json_decode(),返回错误码为4,最后终于找到原因,原来是蒙一个文件中有bom头,最后采用一个命令 ...
- Android开发之从网络URL上下载JSON数据
网络下载拉取数据中,json数据是一种格式化的xml数据,非常轻量方便,效率高,体验好等优点,下面就android中如何从给定的url下载json数据给予解析: 主要使用http请求方法,并用到Htt ...
- ajax返回数据时,如何将javascript值(通常为对象或数组)转为json字符串
ajax获取值时,返回的数据为空时 alert后出现 [ ]; 用if语句判断时不为空,此时如何判断返回的数据是否为空.可将返回的值转化为json字符串. JSON.stringify() 方法用于将 ...
随机推荐
- 线程休眠sleep
一.sleep的作用 sleep() 定义在Thread.java中.sleep() 的作用是让当前线程休眠,即当前线程会从“运行状态”进入到“休眠(阻塞)状态”.sleep()会指定休眠时间,线程休 ...
- 关于 Noip的考纲
关于 \(\text{Noip}\) 的考纲 先放一张图 : 此图包含了 \(\text{Noip}\) 自开始到结束 的所有真题的考察知识点 算法分类标准主要来自于 \(\text{Luogu}\) ...
- Python连载23-file_analysis
一.文件 1.定义:长久保存信息的一种信息集合 2.常用操作:(1)打开关闭(2)读写内容(3)查找 3.open函数 (1)意义:打开文件,带有很多参数 (2)第一个参数:必须有,文件的路径和名称 ...
- Debug 路漫漫-15:Python: NameError:name 'dataset' is not defined
在调试 <Outer Product-based Neural Collaborative Filtering>论文的源码(https://github.com/duxy-me/ConvN ...
- POJ 1094 (传递闭包 + 拓扑排序)
题目链接: POJ 1094 题目大意:有 1 ~ N 个大写字母,且从 A 开始依次 N 个.再给你 M 个小于的关系,比如 A < B ,让你判断三种可能: 1.在第 i 个关系罗列之后,是 ...
- 微信小程序开发语音识别文字教程
微信小程序开发语音识别文字教程 现在后台 添加插件 微信同声传译 然后app.json 加入插件 "plugins": { "WechatSI": { &quo ...
- 关于使用IDEA,使用Maven打包项目
关于使用IDEA,使用Maven打包项目 在近期的一个接口项目中,使用的是SpringBoot + Maven的配置, 由于使用IDEA不久,不太熟悉使用Maven进行项目打包.记录一下. 由于使用的 ...
- vsdbg 下载方法 使用下载工具下载后手动安装
vsdbg国内下载太慢了,这里提供一个使用下载工具下载后,手动安装的处理方法 查看vs build控制台输出: 1>C:\WINDOWS\System32\WindowsPowerShell\v ...
- .NET Core跨平台部署于Docker(Centos)- 视频教程
(双击全屏播放) 往期教程: .NET开发框架(一)-框架介绍与视频演示 .NET开发框架(二)-框架功能简述 .NET开发框架(三)-高可用服务器端设计 .NET开发框架(四)-服务器IIS实践教程 ...
- Go语言中初始化变量中字面量&Type{}、new、make的区别
Go语言中new和make是内建的两个函数,主要用来创建分配类型内存.在我们定义生成变量的时候,可能会觉得有点迷惑,其实他们的规则很简单,下面我们就通过一些示例说明他们的区别和使用. 变量的声明 va ...