django在前端提交表单时产生405错误怎么办?

在编辑收发私信功能,前端无论使用ajax还是form表单提交都显示405错误,此处是form表单提交产生的错误:

Method Not Allowed (POST): /messages/send-message/
[17/Feb/2020 05:20:15] "POST /messages/send-message/ HTTP/1.1" 405 0

form表单:

<form role="form" method="post" action="{% url 'messager:send_message' %}">  
    {% csrf_token %}  
    <div class="form-group">  
  
        <input type="hidden" name="to" value="{{ active }}">  
        <input class="form-control" type="text" name="message" placeholder="发送消息" autocomplete="off">  
    </div>  
  <input id="" type="submit" class="btn btn-success pull-right" value="提交">  
</form>

后端代码 views.py:

@login_required  
@require_http_methods(['POST'])
def send_message(request):  
  """发送消息POST请求""" 
    # 发送者
    sender = request.user  
    # 获取前端传递的用户名
    recipient_username = request.POST.get('to')  
    # 接收者
    recipient = User.objects.get(username=recipient_username)  
    # 获取消息内容
    message = request.POST.get('message')  
    # 创建消息 
    if len(message.strip()) != 0 and sender != recipient:  
        msg = Message.objects.create(  
            sender=sender,  
            recipient=recipient,  
            message=message  
        )  
  
        return render(request, 'messager/single_message.html', {"message": msg})  
  
    return HttpResponse()

反复检查了好几遍,路由没有错,请求方法也没有错,也没有出现跨域,但就是一直出现405错误,怎么也不清楚是哪里的问题,求解决,谢谢!

阅读 5.1k
2 个回答

虽然不是做py的。但是原理是一样的吧。
一定是没有访问到方法。
如果是我排查,先前端console一下,确认访问地址有没有问题。
然后看看get请求能不能访问到,后端随便print一下。
如果get请求能访问到,post不能访问,应该就是django有什么设置吧。

@满眼星辰

谢啦,确实是没有访问到方法,但是原因我始终没有清楚。
刚才把整个私信的app都卸载掉,再装上按照原来的代码复制粘贴了一下,然后表单竟然提交成功了,使用ajax也没有问题,这个困惑了我两天的问题就如此不了了之了...
可能在第一次安装过程中出现了什么问题,第一次是用pycharm的ssH session连接的虚拟服务器,使用pipenv操作,再次安装的过程是xshell连接的服务器,安装之后没有问题,唯一出问题的只有可能是这里了...
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏