首页 > 解决方案 > 即使将属性名称用双引号括起来,也会出现 JSON 解码错误

问题描述

当我尝试发出发布请求以测试登录端点时,我得到“JsonDecodeError”。

登录视图

class Login(APIView):
    def post(self,request):
        data = str(request.data["json"])
        dd = json.loads(data)
        phone_number = dd["phone_number"]

        user = authenticate(phone_number=phone_number)
        if user is not None:
            token = Token.objects.get_or_create(user=user)
            print(token[0])
            login(request, user)
            data = {
            'message': 'valid',
            'token': str(token[0])

            }
        else:
            data = {
            'message': 'invalid'
            }

        return JsonResponse(data)

标签: djangopython-3.xdjango-rest-frameworkdjango-views

解决方案


访问request.data,直接不要用json.loads().

此外,如果它是 DRF 视图 (APIView),则使用更多 DRF 选项(请求/响应/等),而不是 Django 选项。

from rest_framework import status
from rest_framework.response import Response

class Login(APIView):
    def post(self,request):
        phone_number = request.data.get("phone_number")
        user = None
        if phone_number:
            user = authenticate(phone_number=phone_number)
        if user:
            token = Token.objects.get_or_create(user=user)
            login(request, user)
            data = {
                'message': 'valid',
                'token': str(token[0])
            }
            return Response(data)

        return Response(
            {'message': 'invalid'},
            status=status.HTTP_403_FORBIDDEN
        )

推荐阅读