我正在构建一个启用了基本身份验证的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应该可以解决此问题。