【问题标题】:how to fix curl django rest framework?如何修复 curl django rest 框架?
【发布时间】:2020-09-22 09:27:13
【问题描述】:

如何修复 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 有什么问题?

【问题讨论】:

  • 尝试解析request.datarequest.POST
  • 按照@DMalan 的建议,尝试解析request.data,它会起作用。

标签: python-3.x django django-rest-framework django-3.1


【解决方案1】:

这里有可能的改进(从上到下):

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

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

  3. 您来自 curl 的 JSON 在此处request.data。因此,如果您将使用import json,您可以获得像data = json.loads(request.data.encode()) 这样的对象。

  4. 您正在回复201 Created。如果客户端不检查200 OK 的响应,那很好。

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

【讨论】:

    猜你喜欢
    • 2020-04-21
    • 1970-01-01
    • 1970-01-01
    • 2019-09-13
    • 1970-01-01
    • 2016-02-24
    • 1970-01-01
    • 1970-01-01
    • 2015-01-26
    相关资源
    最近更新 更多