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字符串。