Flask 写接口中文乱码踩坑记
在经历了与编码报错和乱码的斗智斗勇后,写下此记~
万恶的报错信息 :json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)
出现此报错信息出现问题的地方可能在于以下两点:
-
dict 和 json 不一样! 不一样!! 不一样!!!
dict 是数据类型, json 是字符串
-
调接口的时候没有写headers = {‘Content-type’:‘application/json’}
都怪自己太菜……
用request.json来获取数据的话,就不能传dict进去,json.dumps()一下
处理json时,要把请求头和响应头的Content-type设置为application/json
1、主函数
以账号检测为例,写个简单的验证用户信息的函数
LOG_INFO = {'张三':'1234','李四':'4567'}
def is_register(name, pwd):
if name in LOG_INFO:
if pwd == LOG_INFO[name]:
return '登录成功'
else:
return '密码错误'
else:
return '账户不存在'
2、服务端
from flask import Flask, request, Response
import json
from main import is_register
app = Flask(__name__)
@app.route('/login', methods=['POST','GET'])
def user_info():
user_name = request.json['name']
user_password = request.json['pwd']
result = is_register(user_name, user_password)
response = Response(json.dumps({'返回结果':result}), mimetype='application/json')
return response
if __name__ == '__main__':
app.run(port=5000, debug=True)
3、客户端
import requests
import json
import time
user_info = {'name':'张三','pwd':'666'}
url = 'http://127.0.0.1:5000/login'
headers = {'Content-type':'application/json'}
result = requests.post(url, data=json.dumps(user_info), headers=headers)