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

使用Django框架时POST/GET方法报错:Method Not Allowed问题咨询

解决Django中POST请求405 Method Not Allowed的问题

问题分析

从日志能看出,GET /registration/请求返回200状态正常,但POST /registration/返回405错误,核心原因是对应视图未配置允许POST方法,或者路由绑定的视图类/函数不支持POST请求。

解决步骤

1. 函数视图场景处理

如果使用函数视图,需通过装饰器指定允许GET和POST方法,或在函数内判断请求类型:

from django.views.decorators.http import require_http_methods
from django.shortcuts import render

@require_http_methods(["GET", "POST"])
def registration_view(request):
    if request.method == 'POST':
        # 处理POST请求,提取表单数据
        username = request.POST.get('username')
        password = request.POST.get('password')
        # 后续数据库查询/存储逻辑
    # 处理GET请求,返回注册页面
    return render(request, 'registration.html')

2. 类视图场景处理

如果使用类视图,需继承View并实现get()和post()方法,或使用支持POST的通用视图:

from django.views import View
from django.shortcuts import render

class RegistrationView(View):
    def get(self, request):
        # 返回注册页面
        return render(request, 'registration.html')
    
    def post(self, request):
        # 处理POST请求
        username = request.POST.get('username')
        password = request.POST.get('password')
        # 数据库操作逻辑
        return render(request, 'success.html')

路由需正确映射类视图:

path('registration/', RegistrationView.as_view(), name='registration'),

3. 前端表单检查

确保前端表单的提交方法设置为post,且包含Django要求的CSRF令牌:

<form action="/registration/" method="post">
    {% csrf_token %}
    <input type="text" name="username" placeholder="用户名">
    <input type="password" name="password" placeholder="密码">
    <button type="submit">提交</button>
</form>

注:缺失CSRF令牌会返回403错误,需和405错误区分开。

4. 路由配置校验

确认path('registration/', ...)绑定的视图是你配置了POST支持的那个,避免路由映射到仅支持GET的视图。

内容的提问来源于stack exchange,提问作者princy-singh

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 07:07:04