python - 禁用 ViewSet 中的方法,django-rest-framework

标签 python django django-views django-rest-framework

ViewSets 有自动的方法来列出、检索、创建、更新、删除……

我想禁用其中的一些,而我想出的解决方案可能不是一个好的解决方案,因为 OPTIONS 仍然声明那些是允许的。

知道如何以正确的方式做到这一点吗?

class SampleViewSet(viewsets.ModelViewSet):
    queryset = api_models.Sample.objects.all()
    serializer_class = api_serializers.SampleSerializer

    def list(self, request):
        return Response(status=status.HTTP_405_METHOD_NOT_ALLOWED)
    def create(self, request):
        return Response(status=status.HTTP_405_METHOD_NOT_ALLOWED)

最佳答案

ModelViewSet的定义是:

class ModelViewSet(mixins.CreateModelMixin, 
                   mixins.RetrieveModelMixin, 
                   mixins.UpdateModelMixin,
                   mixins.DestroyModelMixin,
                   mixins.ListModelMixin,
                   GenericViewSet)

所以与其扩展 ModelViewSet,不如直接使用你需要的东西?比如:

from rest_framework import viewsets, mixins

class SampleViewSet(mixins.RetrieveModelMixin,
                    mixins.UpdateModelMixin,
                    mixins.DestroyModelMixin,
                    viewsets.GenericViewSet):
    ...

使用这种方法,路由器应该只为包含的方法生成路由。

引用:

ModelViewSet

关于python - 禁用 ViewSet 中的方法,django-rest-framework,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23639113/

相关文章:

django - 如何在 user.save() 之后验证并返回访问和刷新 token

python - Django:在几个文件中拆分forms.py

python - 如何循环遍历 python 类对象中的所有变量(而不将它们转换为字符串)?

python - 从多个线程调用 NumPy 的 C API 函数有什么含义?

python - 为什么 Datetime 的 `.timestamp()` 方法返回 `OSError: [Errno 22] Invalid argument` ?

python - 如何对过滤后的搜索查询进行排序/排序并将其呈现在 Django 上的另一个模板上?

python - Django/Python 单元测试 : Let exceptions rise

Liferay 的 Java 还是 Django?

django - 两个项目使用相同的Postgres数据库,项目在Django上

django - 减少Django中的数据库查询