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

pythonDjango

1个回答

写回答

ww1236

2025-06-14 10:05

+ 关注

Django
Django

使用Django REST Framework的ModelViewSet,可以轻松地创建基于模型的API视图。ModelViewSet组合了常见的CRUD操作(创建、读取、更新和删除),因此开发者无需手动编写这些操作的代码。然而,有时候我们希望限制某些HTTP请求方法的访问权限,比如不允许使用405方法。本文将介绍如何通过Django REST Framework实现这一目标,并提供相应的示例代码。

限制HTTP请求方法的访问权限

Django REST Framework中,ModelViewSet提供了多个方法来处理HTTP请求,如GET、POST、PUT、PATCH和DELETE等。有时候,我们希望限制某些方法的访问权限,比如不允许使用405方法。为了实现这一目标,我们可以在ModelViewSet中重写get_allowed_methods方法,并返回一个不包含405方法的列表。

下面是一个示例代码,演示如何重写get_allowed_methods方法来限制HTTP请求方法的访问权限:

Python

from rest_framework.viewsets import ModelViewSet

class MyModelViewSet(ModelViewSet):

queryset = MyModel.objects.all()

serializer_class = MyModelSerializer

def get_allowed_methods(self):

methods = super().get_allowed_methods()

return [method for method in methods if method != 'delete']

在上面的示例中,我们重写了get_allowed_methods方法,并使用了super()方法来获取父类的允许方法列表。然后,我们使用列表推导式过滤掉了'delete'方法,从而实现了不允许使用405方法的效果。

案例代码

下面是一个完整的案例代码,演示了如何使用Django REST Framework的ModelViewSet来限制HTTP请求方法的访问权限:

Python

from rest_framework.viewsets import ModelViewSet

class MyModelViewSet(ModelViewSet):

queryset = MyModel.objects.all()

serializer_class = MyModelSerializer

def get_allowed_methods(self):

methods = super().get_allowed_methods()

return [method for method in methods if method != 'delete']

在上面的代码中,我们定义了一个名为MyModelViewSet的ModelViewSet子类,并指定了查询集和序列化器类。然后,我们重写了get_allowed_methods方法,并在其中过滤掉了'delete'方法。这样,当我们使用MyModelViewSet来处理HTTP请求时,不允许使用405方法。

通过Django REST Framework的ModelViewSet,我们可以轻松地创建基于模型的API视图。有时候,我们希望限制某些HTTP请求方法的访问权限,比如不允许使用405方法。本文介绍了如何通过重写get_allowed_methods方法来实现这一目标,并提供了相应的示例代码。通过这种方式,我们可以灵活地控制API视图的访问权限,提高系统的安全性和稳定性。

举报有用(4分享收藏

Copyright © 2025 IZhiDa.com All Rights Reserved.

知答 版权所有 粤ICP备2023042255号