【发布时间】:2016-04-29 15:47:33
【问题描述】:
从 DRF v3.0 升级到 v3.3.2 后,我在尝试使用 POST 方法创建模型时收到 405(不允许方法)。
我无法在调试器上捕获请求以找出问题所在。
我在 Project/settings.py 中的 DRF 设置:
REST_FRAMEWORK = {
'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.PageNumberPagination',
'PAGINATE_BY' : 10
}
我在 project/urls.py 中的 urlpatterns
urlpatterns = [
...
url(r'^api/v1/seeds/', include('seed.urls')),
...
url('^.*$', IndexView.as_view(), name='index')
]
我在 project/seed/urls.py 中的 urlpatterns:
from django.conf.urls import url, include
from rest_framework import routers
from seed.views import SeedViewSet
router = routers.SimpleRouter()
router.register(r'^', SeedViewSet)
urlpatterns = [
url(r'^', include(router.urls))
]
我的项目/seed/views.py
from seed.serializers import SeedSerializer
from seed.models import Seed
from rest_framework import viewsets
class SeedViewSet(viewsets.ModelViewSet):
queryset = Seed.objects.all()
serializer_class = SeedSerializer
# permission_classes = (permissions.IsAuthenticatedOrReadOnly,)
def perform_create(self, serializer):
serializer.save(user=self.request.user)
return super(SeedViewSet, self).perform_create(serializer)
我的项目/seed/serializer.py
from authentication.serializers import AccountSerializer
from rest_framework import serializers
from seed.models import Seed
class SeedSerializer(serializers.ModelSerializer):
user = AccountSerializer(read_only=True, required=False)
class Meta:
model = Seed
fields = ('id', 'user', 'jobs', 'list_name', 'proxyType', 'created_at', 'updated_at')
read_only_fields = ('id', 'user', 'jobs', 'created_at', 'updated_at')
我做错了什么? 还是因为升级而我应该做不同的事情?
编辑 我正在使用 angularJs 发布到 API,这是我的服务中的函数:
function create(list_name, proxyType) {
return $http.post('/api/v1/seeds/', {
list_name: list_name,
proxyType: proxyType
});
}
【问题讨论】:
-
你能用失败的 python
rest_framework测试重新创建错误吗?如果是这样,您能否将失败的测试代码添加到问题中,以便更清楚发生了什么。 -
对我来说,你应该有一个
create方法而不是perform_create因为create属于 ModelViewSet 和perform_create属于 GenericAPIView 但这只是一个猜测 -
@AaronLelevier,你能告诉我怎么做吗?
标签: python angularjs django python-3.x django-rest-framework