django 视图函数的装饰器action,参数detail是什么作用
时间: 2024-09-29 14:03:18 浏览: 33
在Django REST Framework(DRF)中,`@action`装饰器用于为视图集(ViewSet)添加自定义的HTTP方法。它允许你在默认的CRUD操作之外定义额外的行为。以下是关于`@action`装饰器的详细解释以及`detail`参数的作用:
### `@action` 装饰器概述
1. **作用**:`@action`装饰器用于扩展 Django REST Framework 的 ViewSet 类的功能,使其能够处理除了标准的 GET、POST、PUT、PATCH 和 DELETE 之外的 HTTP 请求方法。通过使用 `@action`,你可以为特定的路由路径定义新的行为。
2. **参数**:
- **methods**:这是一个包含 HTTP 方法的列表,例如 ['GET', 'POST'],指定了哪些 HTTP 请求会触发这个动作。如果未指定,则默认为所有方法。
- **detail**:这是一个布尔值,用来指示该操作是针对单个实例(True)还是整个集合(False)。
- **True**:表示该操作应用于实例级别的请求。也就是说,URL 需要包含主键(如 `/items/<pk>/`)。
- **False**:表示该操作应用于集合级别的请求。也就是说,URL 不需要包含主键(如 `/items/`)。
3. **示例代码**:
```python
from rest_framework.decorators import action
from rest_framework.response import Response
from rest_framework import viewsets
class MyViewSet(viewsets.ModelViewSet):
# 其他设置 ...
@action(detail=True, methods=['get'])
def custom_detail_view(self, request, pk=None):
# 访问特定实例的逻辑
pass
@action(detail=False, methods=['post'])
def custom_list_view(self, request):
# 访问整个集合的逻辑
pass
```
4. **使用方法**:
- 当 `detail=True` 时,URL 模式通常为 `/items/{primary_key}/my_action/`。
- 当 `detail=False` 时,URL 模式通常为 `/items/my_action/`。
阅读全文