Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x 如何修复curl-django-rest框架?_Python 3.x_Django_Django Rest Framework_Django 3.1 - Fatal编程技术网

Python 3.x 如何修复curl-django-rest框架?

Python 3.x 如何修复curl-django-rest框架?,python-3.x,django,django-rest-framework,django-3.1,Python 3.x,Django,Django Rest Framework,Django 3.1,如何修复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&

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

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

  • 添加decorator
    @require\u http\u方法(['POST'])
    允许您在request.method='POST':时删除此代码
    ,Django将自动用另一种方法响应请求。可以从django.views.decorators.http导入此装饰程序
    。http导入需要\u http\u方法

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

  • 来自curl的JSON在这里
    request.data
    。因此,如果您将使用
    import json
    ,您可以得到如下对象
    data=json.loads(request.data.encode())

  • 您正在使用创建的
    201
    进行响应。如果客户端不检查响应是否为
    200 OK
    ,那就好了

  • 更好的方法是使用DRF内置的auth


  • 尝试解析
    request.data
    request.POST
    。正如@DMalan建议的那样,尝试解析
    request.data
    ,它会起作用。