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

Django项目中POST请求判断失效,无法接收表单数据求助

问题:Django表单POST请求不触发视图判断

在Django项目中,尝试提交标题(title)、分类(category)、图片(image)数据到后端,但视图中的POST请求判断语句始终不生效,每次提交都触发GET请求,无法打印"POST request received"。

表单代码

<form action="" enctype="multipart/form-data" method="POST" class="p-4">
    {% csrf_token %}
    <div class="row">
        <div class="col-md-12 mb-3">
            <div class="form-group">
                <label for="title">Title</label>
                <input type="text" class="form-control p-3" placeholder="title" name="title">
            </div>
        </div>
        <div class="col-md-12 mb-3">
            <div class="form-group">
                <label for="category">Category</label>
                <select id="category" class="form-control form-select p-3" name="category">
                    <option value="none">Select a category</option>
                    {% for opt in category %}
                    <option value="{{ opt }}">{{ opt }}</option>
                    {% endfor %}
                </select>
            </div>
        </div>
        <div class="col-md-12 mb-3">
            <div class="form-group">
                <input type="file" class="form-control p-3" name="image">
            </div>
        </div>
        <div class="mt-3 col-md-12">
            <button class="btn btn-primary" style="width: 100%;">Upload</button>
        </div>
    </div>
</form>

视图代码

def add(request):
    if request.method == 'POST':
        print("POST request received")
        title = request.POST.get('title')
        cat = request.POST.get('category')
        image = request.FILES.get('image')
        print(title, cat, image)
    else:
        print("GET request received")
        categories = addcategory.objects.all()
        context = {
            'category': categories,
        }
        return render(request, 'add.html', context)

终端输出

GET request received
[07/Apr/2023 05:49:28] "GET /add/?csrfmiddlewaretoken=il3U1rnxUl5217Wud9i1kX6TfMNk7uOoQDfUYxYb8UlYZIczG4Uz4OgR6nib4yrF&title=veg&category=Food&image=food.jpeg HTTP/1.1" 200 4672

解决方案

从终端输出可见,表单实际以GET方式提交,尽管代码中指定了method="POST",修复步骤如下:

  1. 明确提交按钮类型
    表单按钮未设置type="submit",部分浏览器会默认解析为普通按钮,导致表单以GET方式提交。修改按钮代码:

    <button type="submit" class="btn btn-primary" style="width: 100%;">Upload</button>
    
  2. 完善POST分支响应返回
    当前视图POST分支无响应返回,处理完请求后需返回页面渲染或重定向,避免服务器错误。修改视图代码:

    def add(request):
        if request.method == 'POST':
            print("POST request received")
            title = request.POST.get('title')
            cat = request.POST.get('category')
            image = request.FILES.get('image')
            print(title, cat, image)
            # 可在此添加数据保存逻辑
            # 处理完成后返回页面,保持上下文一致
            categories = addcategory.objects.all()
            context = {
                'category': categories,
                'message': '数据提交成功'
            }
            return render(request, 'add.html', context)
        else:
            print("GET request received")
            categories = addcategory.objects.all()
            context = {
                'category': categories,
            }
            return render(request, 'add.html', context)
    
  3. 验证表单渲染结果
    检查页面渲染后的HTML源码,确认method="POST"和{% csrf_token %}是否正确输出,排除模板语法错误或代码覆盖问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 14:55:00