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)