def ans_result(request):
if request.method == "POST":
redisKey = request.POST.get('ans_uuid')
msg = DsRedis.OpsAnsibleModel.rpop(redisKey)
if msg:
print('---',msg)
return JsonResponse({'msg': msg, "code": 200, 'data': []})
else:
return JsonResponse({'msg': None, "code": 200, 'data': []})
返回是報錯如下
TypeError: Object of type 'bytes' is not JSON serializable
查看message的值
msg = DsRedis.OpsAnsibleModel.rpop(redisKey)
msg取出的值變成了: b'[Done] Ansible Done.'
注: 帶有 b 開頭的字節(jié)
redis中key的值
6) "[Start] Ansible Model: ping ARGS:"
127.0.0.1:6379[3]> LRANGE 8b3e134d-6ad7-4e21-b5d6-c7dfc1f101a8 0 -1
1) "[Done] Ansible Done."
2) "10.39.6.150 | SUCCESS >> {\n \"ping\": \"pong\",\n \"_ansible_parsed\": true,\n \"_ansible_no_log\": false\n}"
3) "[Start] Ansible Model: ping ARGS:"
4) "[Done] Ansible Done."
5) "10.39.6.150 | SUCCESS >> {\n \"ping\": \"pong\",\n \"_ansible_parsed\": true,\n \"_ansible_no_log\": false\n}"
6) "[Start] Ansible Model: ping ARGS:"
解決:
json模塊不支持bytes類型,要先將bytes轉(zhuǎn)換為str格式
即: 返回字符串加上 decode方法
def ans_result(request):
if request.method == "POST":
redisKey = request.POST.get('ans_uuid')
msg = DsRedis.OpsAnsibleModel.rpop(redisKey)
if msg:
return JsonResponse({'msg': msg.decode(), "code": 200, 'data': []})
注: python3 和python2 之間對字符的編碼有很大變化 ,這回導(dǎo)致python2 寫的代碼在python3里寫的代碼可能會有異常