Django POST 方法给出 500 内部服务器错误

问题描述 投票:0回答:3

我目前正在开发 Django 项目。当我使用 CURL 发送 GET 请求时,它工作正常,但在 POST 请求的情况下,它会给我 500 内部错误。我认为这与 csrf 令牌有关,我不知道如何处理它或 csrf 将如何解决我的错误。

我还在settings.py中设置了DEBUG = False和ALLOWED_HOSTS = ['*'],但我也遇到了同样的错误:

服务器错误(500)

这是我的一些代码:

url.py

from django.conf.urls import patterns, url

urlpatterns = patterns(
    'project.views',
    url(r'^users/$', 'userList', name='userList'),
    url(r'^users/(?P<pk>[0-9]+)$', 'userDetail', name='userDetail'),
)

这是来自视图的函数,py

@api_view(['GET', 'POST'])

def userList(request):
    if request.method == 'GET':
        user = users.objects.all()
        serializer = UsersSerializer(user, many=True)
        return Response(serializer.data)

    elif request.method == 'POST':
        serializer = UsersSerializer(data=request.DATA)
        if serializer.is_valid():
            serializer.save()
            return Response(serializer.data, status=status.HTTP_201_CREATED)
        else:
            return Response(
            serializer.errors, status=status.HTTP_400_BAD_REQUEST)

这是我在终端中使用的命令:

curl -X POST http://127.0.0.1:8000/users/ -d '{"用户名":"root", "电子邮件":"[电子邮件受保护]"}' -H "内容-类型:application/json"

Django 版本号:1.9

在 POSTMAN 中,我收到的错误为:

{ “用户名”: [ “此字段是必需的。” ], “电子邮件”: [ “此字段是必需的。” ] }

python django django-rest-framework django-csrf
3个回答
0
投票

不应该是

data=request.data
(小写
data
)吗?


0
投票

其实数据不应该这样分配到post吗?

serializer = UsersSerializer(data=request.POST)

0
投票

当您发送带有标头

Content-Type: application/json
的数据时,请求数据在
request.body
中可用:

serializer = UsersSerializer(data=request.body)

在这种情况下,

request.body
是一个字节串。如果您的
UsersSerializer
类需要不同的数据类型,

对于字符串,您需要对字节串调用

decode
方法,

serializer = UsersSerializer(data=request.body.decode('utf-8'))

对于字典,您需要解析 json 字符串,

import json

# your userList function

serializer = UsersSerializer(data=json.loads(request.body))

请注意,如果您需要解析 json 正文,您可能需要使用 try-catch 块,以防用户发送 json 不可序列化字符串或请求中不包含正文。

© www.soinside.com 2019 - 2024. All rights reserved.