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

Django REST Framework出现HTTP 405 Method Not Allowed错误求助

Django REST Framework 405 Method Not Allowed 问题解决

核心问题1:请求方法不匹配

日志显示你用GET请求访问了/create-room,但你的CreateRoomView只实现了post方法,DRF会默认拒绝未实现的HTTP方法,因此返回405错误。

解决方式:

  • 若你是通过浏览器直接访问该地址,浏览器默认发送GET请求,需改用POST工具(如Postman、curl)发送POST请求并携带对应参数;
  • 若确实需要支持GET请求(比如查询当前用户房间),可在CreateRoomView中添加get方法:
class CreateRoomView(APIView):
    serializer_class = CreateRoomSerializer

    def get(self, request, format=None):
        host = self.request.session.session_key
        queryset = Room.objects.filter(host=host)
        if queryset.exists():
            return Response(RoomSerializer(queryset[0]).data)
        return Response({'Message': 'No room found for this host'}, status=status.HTTP_404_NOT_FOUND)

    # 保留原有的post方法...

核心问题2:序列化器字段拼写错误

你的serializer.py中存在拼写错误:geust_can_pause应为guest_can_pause(缺少字母t),该错误会导致数据序列化/反序列化失败,即使请求方法正确也会返回异常。

修改后的serializer.py:

from rest_framework import serializers
from .models import Room


class RoomSerializer(serializers.ModelSerializer):
    class Meta:
        model = Room
        fields = ('id','code','host','guest_can_pause',
        'votes_to_skip','created_at')


class CreateRoomSerializer(serializers.ModelSerializer):
    class Meta:
        model = Room
        fields = ('guest_can_pause', 'votes_to_skip')

额外建议

  • 测试API时确保请求方法与视图支持的方法一致;
  • 检查模型字段名与序列化器字段名完全匹配,避免拼写错误;
  • 可在视图中添加allowed_methods属性明确指定支持的方法,示例:
class CreateRoomView(APIView):
    serializer_class = CreateRoomSerializer
    allowed_methods = ['POST', 'GET']  # 按需配置支持的方法
    # ... 方法实现

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 06:55:17