Django REST Framework (ModelViewSet),不允许 405 方法

django

1个回答

写回答

楓曼巴

2025-08-21 22:40

+ 关注

Django
Django

使用Django REST Framework的ModelViewSet来构建Web API是一种非常便捷和高效的方式。ModelViewSet提供了一组默认的CRUD操作方法,包括GET、POST、PUT、PATCH和DELETE。然而,在某些情况下,我们可能希望限制可以使用的方法,禁止某些操作。本文将介绍如何在Django REST Framework中禁止405方法,并提供一些案例代码。

禁止405方法的方法

Django REST Framework中,可以通过覆盖ModelViewSet的get_allowed_methods方法来禁止405方法。该方法返回一个包含允许的HTTP方法的列表。我们可以在这个列表中移除不希望被允许的方法,然后返回修改后的列表。

下面是一个示例代码,展示了如何禁止POST方法:

Python

from rest_framework import viewsets

class MyViewSet(viewsets.ModelViewSet):

queryset = MyModel.objects.all()

serializer_class = MyModelSerializer

def get_allowed_methods(self):

methods = super().get_allowed_methods()

methods.remove('POST')

return methods

在上面的代码中,我们首先调用了父类的get_allowed_methods方法,获取到允许的方法列表。然后,我们移除了其中的POST方法,并返回修改后的列表。

案例代码

下面是一个更完整的示例,展示了如何使用ModelViewSet和禁止405方法:

Python

from rest_framework import viewsets

class MyModelViewSet(viewsets.ModelViewSet):

queryset = MyModel.objects.all()

serializer_class = MyModelSerializer

def get_allowed_methods(self):

methods = super().get_allowed_methods()

methods.remove('POST')

methods.remove('DELETE')

return methods

在上面的代码中,我们定义了一个名为MyModelViewSet的ModelViewSet,指定了数据模型和序列化器。然后,我们覆盖了get_allowed_methods方法,移除了POST和DELETE方法。这样,只有GET、PUT和PATCH方法会被允许。

通过覆盖ModelViewSet的get_allowed_methods方法,我们可以很方便地禁止某些405方法。这样可以确保我们的Web API只暴露出我们想要的操作方法,增加了安全性和可控性。在实际应用中,根据需求进行相应的方法限制,可以更好地实现我们的API设计和开发目标。

希望本文对你理解如何禁止405方法有所帮助,并且能够在你的Django REST Framework项目中得到应用。祝你编码愉快!

举报有用(4分享收藏

Copyright © 2025 IZhiDa.com All Rights Reserved.

知答 版权所有 粤ICP备2023042255号