You need to enable JavaScript to run this app. Django REST Framework如何实现DELETE请求删除数据库指定用户
优惠活动
大模型
产品
解决方案
定价
更多

Django REST Framework如何实现DELETE请求删除数据库指定用户

当前删除接口无法生效的核心原因

你现在用的RetrieveUsersView继承自generics.ListCreateAPIView,这个类的设计定位就是处理用户集合层面的请求:

  • 仅能响应无路径参数的/all_users/请求,提供全量用户列表查询、创建用户的能力
  • 本身没有定义单条资源的处理逻辑,也不内置DELETE请求的处理方法
  • 现有路由里也没有配置带用户ID参数的匹配规则,哪怕你手动输入/all_users/1的地址,请求也无法被正确路由到处理逻辑上。
可落地的实现方案

1. 新增支持单用户操作的泛型视图

不需要手写删除逻辑,DRF的generics.RetrieveUpdateDestroyAPIView已经内置了完整的单资源处理能力,天生支持DELETE请求触发数据库删除操作:

class UserDetailView(generics.RetrieveUpdateDestroyAPIView):
    """处理单条用户记录的查询、修改、删除"""
    serializer_class = UserSerializer
    authentication_classes = (authentication.TokenAuthentication,)
    permission_classes = (permissions.IsAdminUser,)
    queryset = get_user_model().objects.all()

这个视图的内置逻辑会自动从路径参数中读取用户ID,匹配到数据库对应用户记录后,接收到DELETE请求时就会直接执行删除动作,不需要你额外写ORM查询、删除的代码。
注意:权限配置不能省略,否则任意登录用户都能通过DELETE请求删除其他账号,存在严重的安全隐患

2. 补充对应的路由规则

在现有路由列表中新增一条带用户ID参数的匹配规则,对应你预期的/api/users/all_users/1接口形式:

urlpatterns = [
  path('create/', views.CreateUserView.as_view(), name='create'),
  path('token/', views.CreateTokenView.as_view(), name='token'),
  path('me/', views.ManageUserView.as_view(), name='me'),
  path('all_users/', views.RetrieveUsersView.as_view(), name='all_users'),
  # 新增路径:匹配带整数用户ID的单资源请求
  path('all_users/<int:pk>/', views.UserDetailView.as_view(), name='user-detail')
]

Django路由匹配时会优先匹配精确路径,再匹配带参数的路径,两个同前缀的路径不会产生冲突。

3. 需要避开的常见问题

  • 不要把删除逻辑硬塞到原来的RetrieveUsersView里:会打破集合视图的设计边界,还要自己手动实现路径参数解析、单条记录定位,代码冗余度很高。
  • 测试时注意路径末尾的斜杠:DRF默认会做斜杠的自动跳转,但手动测试的时候最好带上,避免出现404错误。
  • 现有序列化器不需要修改:你写的UserSerializer已经覆盖了单资源操作需要的字段映射,不需要为了删除功能额外改动。

内容的提问来源于stack exchange,提问作者Nick

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.11.09 00:24:02