0

如何修复 curl django rest 框架,我收到这样的错误

rest_framework.exceptions.ParseError: JSON parse error - Expecting value: line 1 column 1 (char 0)

这是我的卷发

curl -X POST http://127.0.0.1:8000/api/signup -H "Content-Type: application/json" -d '{"username":"indah","password":"indah123"}'

这是我的代码,

@csrf_exempt
def signup(request):
    if request.method == 'POST':
        try:
            data = JSONParser().parse(request)
            user = User.objects.create_user(data['username'], password=data['password'])
            user.save()
            token = Token.objects.create(user=user)
            return JsonResponse({'token':str(token)}, status=201)
        except IntegrityError:
            return JsonResponse({'error':'That username has already been taken. Please choose a new username'}, status=400)

并在行中出错

data = JSONParser().parse(request)

我使用cmd windows进行curl curl有什么问题?

4

1 回答 1

0

这里有可能的增强(从上到下):

  1. 添加装饰器@require_http_methods(['POST'])允许您删除此代码if request.method == 'POST':,Django 将自动使用另一种方法响应请求。这个装饰器可以导入from django.views.decorators.http import require_http_methods

  2. 身份验证已经内置在 DRF 中,有几个选项。文档在这里您的示例可以是基本身份验证或令牌身份验证。为了简化您的示例,您可以使用来自import json.

  3. 你来自 curl 的 JSON 在这里request.data。所以如果你会使用import json你可以得到这样的对象data = json.loads(request.data.encode())

  4. 你用 回应201 Created。如果客户不检查200 OK.

  5. 更好的方法是使用 DRF 内置身份验证。

于 2020-09-22T11:00:32.760 回答