一、Json序列化
Django在请求完后,需要将返回的对象序列化成json串后,最后返回的时候才能以JsonRepsonse的形式返回出来,否则会报错,前端页面也需要根据返回的json串来做响应处理。
对象Json序列化
1. 继承serializers包下的ModelSeriralizer:
from rest_framework import serializersclass UserSerialize(serializers.ModelSerializer):class Meta:model = Userfields = ("id", "username", "password")
在调用的时候,需要将对象传入到UserSerialize()当作参数,传进去,否则返回的就会只一个username:""
class UserLogin(APIView):@staticmethoddef s_result(result):r = result.to_json_string()return JsonResponse(result.__dict__,json_dumps_params={'sort_keys': False, 'indent': 4, 'ensure_ascii': False}, safe=False)def post(self, request):r = Result()try:username = request.data["username"]password = request.data["password"]result = User.objects.filter(username=username, password=password).first()if result is None:print("出错了!")raise Exception("用户名或密码错误!")# 否则登录成功, 在赋值给session之前需要先将result转换为json串,否则报错:TypeError: Object of type User is not JSON serializable# request.session['user'] = result# print(request.session['user'])print("找到记录:", result)#当前登录的result为User对象里的信息# 序列化的时候此处必须要传result,否则序列化后的结果为""r.data = UserSerialize(result).dataprint("序列化后的对象信息为:", r.data)## {'id': 4, 'username': 'zhuzhu', 'password': '123456'}request.session['user'] = r.dataprint('dict一些信息:', self.__dict__)except Exception as e:r.error(e)return HttpResponse(e)return JsonResponse(r.data)
最后返回的时候,我们需要将序列化的json串r.data用JsonResponse包含返回出去。