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

Django测验项目点击+按钮出现405错误,无法添加问题

解决Django添加问题时的405 Method Not Allowed错误

问题根源

你的QuestionView类仅实现了get()方法,Django类视图会根据请求方法匹配对应的处理函数。当页面发送POST请求时,视图没有对应的post()方法处理该请求,因此返回405错误。另外你在get()方法内判断request.method == "POST"是无效的——get()方法只会处理GET类型的请求,POST请求根本不会进入这个方法。

修复步骤

1. 修改views.py,添加POST请求处理

将创建问题的逻辑移到单独的post()方法中,处理完成后重定向回原页面(遵循POST/REDIRECT/GET模式,避免刷新重复提交):

from django.shortcuts import render, redirect
from django.views import View
from .models import Question

class QuestionView(View):
    def get(self, request):
        all_items = Question.objects.all()
        return render(request, "questionmanager.html", {'all_items': all_items})
    
    def post(self, request):
        # 处理POST请求,创建新问题
        item_name = request.POST.get('itemName')
        if item_name:  # 简单校验输入不为空
            Question.objects.create(name=item_name)
        # 重定向回GET请求页面,避免刷新重复提交
        return redirect('question')

2. 优化前端fetch请求(可选)

原代码中window.location.reload()会立即执行,可能在POST请求还未完成时就刷新页面,导致新添加的问题可能不显示。可以修改为请求成功后再刷新:

function addQuestion(){
    let itemName = prompt('Add new question');
    if (!itemName) return; // 用户取消输入时直接返回
    let token = "{{ csrf_token }}";
    let formData=new FormData();
    formData.append('itemName', itemName);
    formData.append("csrfmiddlewaretoken", token);

    fetch('/question/', {
        method: 'POST',
        body: formData
    })
    .then(response => {
        if (response.ok) {
            window.location.reload();
        } else {
            alert('添加失败,请重试');
        }
    })
    .catch(error => {
        console.error('请求错误:', error);
        alert('添加失败,请重试');
    });
}

额外建议

可以在模型中添加__str__方法,方便后台管理查看问题内容:

class Question(models.Model):
    created_at=models.DateField(default=date.today)
    name=models.CharField(max_length=200)
    done=models.BooleanField(default=False)
    
    def __str__(self):
        return self.name

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 20:57:06