Django休息基本身份验证问题(HTTP 400)

时间:2015-11-03 19:49:41

标签: python django authentication django-rest-framework django-rest-auth

我正在构建一个启用了基本身份验证的API。当我尝试使用可浏览的API将实例添加到数据库(在具有AllowAny设置的视图集上)时。我没有登录时可以使用。但是,当我没有登录时,它会给我一个错误:

HTTP 400错误请求 Content-Type:application / json 变化:接受 允许:POST,OPTIONS

{
    "product": [
        "This field is required."
    ],
    "buyername": [
        "This field is required."
    ],
    "buyeremail": [
        "This field is required."
    ]
}

这是视图集:

class TicketBuyerViewSet(mixins.CreateModelMixin,  
                   viewsets.GenericViewSet):
    queryset = Ticket.objects.all()
    serializer_class = TicketSerializer
    permission_classes = (IsOwnerOrReadOnly,permissions.AllowAny)

    def perform_create(self, serializer):
        serializer.save(isPayed=False,checkedIn=False,isRefunded=False,checkedInDate=None,paymentID="",paymentDate=None)

这是我的urls.py文件:

from django.conf.urls import include, url
from django.contrib import admin

urlpatterns = [
    url(r'^admin/', include(admin.site.urls)),
    url(r'^', include('events.urls')),
    url(r'^docs/', include('rest_framework_swagger.urls')),
]

urlpatterns += [
    url(r'^api-auth/', include('rest_framework.urls',
                               namespace='rest_framework')),
]

我最近才遇到这个问题。我从django docs制作了片段应用程序,它完美地工作了大约一个星期。但是,因为有一天我和这个api有同样的问题,就像我自己的' API。我也试过chrome和firefox。

编辑虽然我明白为什么http错误代码可能会让我感到困惑,但我确实错误地认为错误在于django-rest身份验证,因为当我退出并填写完全相同的数据,它的工作。以下是我分别登录和注销时PUT请求的响应错误代码:

[03/Nov/2015 20:38:44] "POST /ticketsbuyer/ HTTP/1.1" 400 10513
[03/Nov/2015 20:39:24] "POST /ticketsbuyer/ HTTP/1.1" 201 4543

编辑2:我从django-rest-framework-tutorial github下载了确切的源代码。我创建了一个超级用户和EXACT同样的事情发生了,由于某种原因django休息浏览api或我的浏览器没有正确发送帖子数据。

编辑3 由于某种原因,我可以降级到其余框架的3.2.5版本。我不是唯一遇到此问题的人:Django Rest Framework - Browsable API Form always returns 400 bad request

2 个答案:

答案 0 :(得分:3)

有一个关于此的错误:https://github.com/tomchristie/django-rest-framework/issues/3588

但是,我还没有能够复制。欢迎帮助了解正在发生的事情。

编辑:谢谢,看来确实认证是这个错误的关键。

编辑:升级到3.3.1应解决问题。

答案 1 :(得分:1)

HTTP400通常不是身份验证错误。通常,这是一个数据错误。它发回的消息表明您没有发送必填字段,因此请检查您要发送的数据并确保它符合所有必填字段。如果是身份验证问题,则会返回HTTP401