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",修复步骤如下:
明确提交按钮类型
表单按钮未设置type="submit",部分浏览器会默认解析为普通按钮,导致表单以GET方式提交。修改按钮代码:<button type="submit" class="btn btn-primary" style="width: 100%;">Upload</button>完善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)验证表单渲染结果
检查页面渲染后的HTML源码,确认method="POST"和{% csrf_token %}是否正确输出,排除模板语法错误或代码覆盖问题。
内容的提问来源于stack exchange,提问作者Kathirvel Rajmohan
相关产品推荐
相关产品推荐

