You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

关于Django函数视图(FBV)请求方法处理的技术疑问

关于Django函数视图(FBV)请求方法处理的解答

第一个疑问:绑定了仅接受PUT请求的FBV的URL能否处理DELETE请求?

是的,如果你的URL绑定了用@require_http_methods(["PUT"])装饰的FBV,这个URL将无法处理DELETE请求——装饰器会直接返回405 Method Not Allowed响应。

如果要让同一个URL支持PUT和DELETE两种请求,你有两种FBV层面的处理方式:

  • 方式一:在同一个FBV内部通过request.method做条件分支,分发不同请求的处理逻辑:
from django.http import HttpResponse

def my_view(request):
    if request.method == 'PUT':
        # 处理PUT请求逻辑
        return HttpResponse("Handled PUT request")
    elif request.method == 'DELETE':
        # 处理DELETE请求逻辑
        return HttpResponse("Handled DELETE request")
    else:
        # 处理其他不允许的方法
        return HttpResponse(status=405)
  • 方式二:先用@require_http_methods(["PUT", "DELETE"])装饰器限制该FBV仅接受这两种方法,再在内部做分支处理:
from django.views.decorators.http import require_http_methods
from django.http import HttpResponse

@require_http_methods(["PUT", "DELETE"])
def my_view(request):
    if request.method == 'PUT':
        return HttpResponse("Handled PUT request")
    elif request.method == 'DELETE':
        return HttpResponse("Handled DELETE request")

第二个疑问:独立函数处理PUT/DELETE请求是否只有类视图(CBV)和DRF两种方式?

不是,除了你提到的两种方式,原生Django还支持在普通FBV中直接处理PUT/DELETE请求,也就是上面提到的两种FBV内部分支处理的方式,不需要依赖DRF或CBV。

补充说明:

  • 类视图(CBV)的优势在于将不同HTTP方法的逻辑拆分为独立方法,避免条件分支,代码结构更清晰;
  • DRF的@api_view装饰器则是为REST API场景优化,自带请求解析、响应格式化等功能,适合API开发;
  • 普通FBV的方式更灵活,适合简单场景或需要快速实现的逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 07:54:10