Django REST framework中POST请求报405 Method Not Allowed问题求助
错误原因
你代码里的@api_view装饰器只指定了允许GET请求方法,尽管函数内部写了POST请求的处理逻辑,但Django REST Framework的api_view装饰器会先对请求方法做校验,不在允许列表里的请求会直接返回405错误,这就是POST请求被拒绝的核心原因。
解决方法
1. 更新api_view装饰器的允许方法列表
把装饰器改成同时支持GET和POST,让DRF允许该视图处理POST请求:
@api_view(['GET', 'POST']) def product_list(request): if request.method == 'GET': products = Product.objects.all() serializer = ProductSerializer(products, many=True) return Response(serializer.data) if request.method == 'POST': serializer = ProductSerializer(data=request.data) if serializer.is_valid(): serializer.save() return Response(serializer.data)
2. 补充序列化器校验失败的响应(推荐)
当前代码中如果序列化器校验不通过,没有返回任何响应,不符合REST API规范,建议添加错误返回逻辑:
if serializer.is_valid(): serializer.save() return Response(serializer.data) # 添加这行,返回校验错误信息和400状态码 return Response(serializer.errors, status=400)
修改完成后,POST请求就能正常被视图处理了。
内容的提问来源于stack exchange,提问作者Victor David
相关产品推荐
相关产品推荐

