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

Django中POST提交HTML表单时CSV文件无法获取的问题

问题排查与解决

核心原因

你的HTML表单把enctype="multipart/form-data"写在了<input>标签上,这是错误的。这个属性必须添加到<form>标签中,否则浏览器不会以正确的多部分表单格式提交文件,导致Django无法解析文件数据到request.FILES里,只会把文件名放到request.POST中。

修复步骤

1. 修正HTML表单代码

将enctype="multipart/form-data"移到<form>标签上:

<form action="" method="post" enctype="multipart/form-data">
  <input type="file" name="csvFile" accept=".csv">
  <button type="submit">Submit using POST</button>
</form>

注:<button>的formmethod="post"可直接移除,因为form已经指定了method="post"。

2. 优化视图代码(可选但推荐)

  • 移除csrf_exempt,改用Django自带的CSRF保护,在表单中添加{% csrf_token %}标签(需确保模板启用Django模板语法):
    修正后的表单:

    <form action="" method="post" enctype="multipart/form-data">
      {% csrf_token %}
      <input type="file" name="csvFile" accept=".csv">
      <button type="submit">Submit using POST</button>
    </form>
    

    同时删除视图中的@csrf_exempt装饰器,避免安全风险。

  • 添加文件存在性检查,避免直接取request.FILES['csvFile']触发KeyError:

    def index(request):
        context = {}
        if request.method == 'POST':
            # 检查文件是否存在
            if 'csvFile' in request.FILES:
                f = request.FILES['csvFile']
                print(type(f))
                radius_results = pull_radius_zips(f)
                print('checking this works to this point')
            else:
                # 处理未上传文件的情况
                context['error'] = '请选择要上传的CSV文件'
        return render(request, "zip_app/index.html", context)
    

验证

修改后重新提交表单,文件会被正确解析到request.FILES['csvFile']中,即可正常处理上传的CSV文件。

内容的提问来源于stack exchange,提问作者Louis Nix II

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 20:33:11