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

HTTP 400错误请求
内容类型: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文档制作了代码片段应用程序,该应用程序运行了大约一周时间非常完美。但是,由于过了几天,我对此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下载了确切的源代码。我创建了一个超级用户,由于某些原因django rest浏览的api或我的浏览器未正确发送发布数据,因此发生了完全相同的事情。

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

最佳答案

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

但是,我还不能繁殖。欢迎帮助以了解发生了什么。

编辑:谢谢,似乎确实是身份验证是此错误的关键。

编辑:升级到3.3.1应该可以解决此问题。

10-01 22:59
查看更多