我有一个使用ModelViewSet实现的模型。在这种情况下,GET and POST工作得很好。但是当我定义PUT时,我在rest客户机中得到以下响应:
{
"status": false,
"errors": [],
"exception": "Method \"PUT\" not allowed."
}
class OrganizationViewSet(viewsets.ModelViewSet):
queryset = Organization.object.all()
serializer_class = OrganizationSerializer
def get_queryset(self):
if not self.isUserAuthorized(self.request.user):
return Response(str("forbidden"), status=status.HTTP_403_FORBIDDEN)
return self.queryset
def create(self, request):
if not self.isUserAuthorized(self,request.user):
return Response(str("forbidden"), status=status.HTTP_403_FORBIDDEN)
org = self.request.data['name']
result = Organization.object.create_organization(org)
if not result:
return Response(str("error in creating organization"), status=status.HTTP_400_BAD_REQUEST)
else:
return Response(OrganizationSerializer(result).data, status=status.HTTP_201_CREATED)
def update(self):
pass
urls.py
router = routers.DefaultRouter()
router.register(r'api/v1/organization', OrganizationViewSet )
urlpatterns = [
# url(r'^', include(router.urls)),
]
有没有人可以建议我应该如何在这里实现update方法,以便下面的请求可以工作:
PUT localhost:8000/api/v1/organization/:id
Param in JSON(application/json) {
"name = "new_name"
}
这就是我使用update()
的方法。对于partial_update
,您需要在get_serializer()
中使用partial=true
。希望它在将来对人们有所帮助。
编辑:在views.py
中完成我的viewset
类并设置格式。
class MonitorViewSet(viewsets.ModelViewSet):
permission_classes_by_action = MyRestrictedViewPermissions
queryset = models.Monitor.objects.all().order_by('monitor_name')
serializer_class = serializers.MonitorSerializer
def update(self, request, *args, **kwargs):
instance = self.get_object()
# serializer = self.get_serializer(data=request.data,many=isinstance(request.data, list), partial=True)
serializer = self.get_serializer(instance, data=request.data)
serializer.is_valid(raise_exception=True)
if request.user.has_perm('change_monitor', instance):
instance = serializer.save()
self.perform_update(instance)
headers = self.get_success_headers(serializer.validated_data)
return Response(serializer.data, status=status.HTTP_206_PARTIAL_CONTENT, headers=headers)
else:
return HttpResponseForbidden('Somehow, you aren\'t authorized to update')
def partial_update(self, request, *args, **kwargs):
instance = self.get_object()
#serializer = self.get_serializer(data=request.data,many=isinstance(request.data, list), partial=True)
serializer = self.get_serializer(instance, data=request.data, partial=True)
serializer.is_valid(raise_exception=True)
if request.user.has_perm('change_monitor',instance):
serializer.save()
headers = self.get_success_headers(serializer.data)
return Response(serializer.data, status=status.HTTP_206_PARTIAL_CONTENT, headers=headers)
else:
return HttpResponseForbidden('Somehow, you aren\'t authorized to partial update')
当我要求一个图像http://127.0.0.1:8000/api/images/1/或者传入参数进行裁剪http://127.0.0.1:8000/api/images/1/?height=320 我得到的答复是: 而在http://127.0.0.1:8000/api/images/ 答复是: 为什么缩略图不容易返回主机名,我如何将基本网址追加到响应中? 以下是我的看法。派克
问题内容: 我想提供两个不同的序列化器,但仍然可以从以下所有功能中受益: 当查看对象列表时,我希望每个对象都有一个重定向到其详细信息的url,并使用目标模型来显示其他所有关系。 例: 查看对象的详细信息时,我想使用默认值 例: 我设法按照以下方式完成了所有这些工作: serializers.py views.py 基本上,我会检测用户何时请求列表视图或详细视图,并进行更改以满足我的需求。不过,我对
通过使用Java语言实现一个完整的框架设计,这个框架中主要内容有第一小节介绍的Web框架的结构规划,例如采用MVC模式来进行开发,程序的执行流程设计等内容;第二小节介绍框架的第一个功能:路由,如何让访问的URL映射到相应的处理逻辑;第三小节介绍处理逻辑,如何设计一个公共的 调度器,对象继承之后处理函数中如何处理response和request;第四小节至第六小节介绍如何框架的一些辅助功能,例如配置
我希望提供两种不同的序列化程序,同时又能够从的所有功能中获益: 当查看对象列表时,我希望每个对象都有一个重定向到其详细信息的url,并且使用目标模型的显示所有其他关系; 示例: 查看对象的详细信息时,我希望使用默认的 示例: 我设法通过以下方式使这一切如我所愿发挥作用: serializers.py views.py 基本上,我会检测用户何时请求列表视图或详细视图,并根据需要更改。我对这段代码并不
本文向大家介绍tp5框架无刷新分页实现方法分析,包括了tp5框架无刷新分页实现方法分析的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了tp5框架无刷新分页实现方法。分享给大家供大家参考,具体如下: 已tp5 分页为例, 1.默认生成的分页 页码如下: 2.点击页码 值,跳转到对应的页面,并get传 page='1' or '2'; 所以无刷新需要做到两点,阻止页码 a链接跳转 和 传值【
就像Flask拥有来实现迁移一样。猎鹰有类似烧瓶的东西吗?