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

Posted

技术标签:

【中文标题】Django POST 方法给出 500 内部服务器错误【英文标题】:Django POST method giving 500 internal server error 【发布时间】:2017-04-02 15:32:37 【问题描述】:

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

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

服务器错误 (500)

这是我的一些代码:

urls.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 '"username":"root", "email":"abc@gmail.com"' -H "Content-Type: application/json"

Django 版本号:1.9

在 POSTMAN 中,我收到以下错误:

“用户名”: [ “这是必填栏。” ], “电子邮件”: [ “这是必填栏。” ]

【问题讨论】:

您有权访问服务器的日志吗?回溯说明了什么? 如果您将 DEBUG 设置为 True,您将看到完整的错误。它说什么? 当我使用 POSTMAN 时,它给了我一个错误: "detail": "Unsupported media type \"text/plain;charset=UTF-8\" in request." 你能添加你的UsersSerializer类的定义吗? 【参考方案1】:

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

serializer = UsersSerializer(data=request.POST)

【讨论】:

【参考方案2】:

不应该是data=request.data(小写data)吗?

【讨论】:

在 Django 视图函数中,post 数据通常位于request.POST 不,它不起作用。我已经尝试了 data=request.data 和 request.post,但似乎都不起作用。

以上是关于Django POST 方法给出 500 内部服务器错误的主要内容,如果未能解决你的问题,请参考以下文章

内部服务器 500 错误 - Django

JSON 响应给出 Http 500 内部服务器错误

在前端 PUT 请求中返回内部服务器 500 错误 | Django Vue

Web API POST 方法返回 HTTP/1.1 500 内部服务器错误

500内部服务器错误;在spring Boot rest api中使用POST方法时

出现错误:使用 AJAX POST 到 C# Web 方法时出现 500 内部服务器错误