django:通过 HttpResponseRedirect 传递发布的文件

Posted

技术标签:

【中文标题】django:通过 HttpResponseRedirect 传递发布的文件【英文标题】:django: Passing posted files through HttpResponseRedirect 【发布时间】:2015-09-24 06:47:15 【问题描述】:

我想通过 HttpResponseRedirect 将 request.FILES 从 post 表单传递到不同的表单,我尝试使用会话变量,但无法通过它们传递文件。可能吗 ?如果没有:我该怎么做?

我想传递一个 XML 文件的原因是因为我需要在下一个视图中显示文件的已处理数据,并使用 HttpResponseRedirect 重定向到该视图。 这是一个sn-p:

# 处理发布数据的视图 开发我的视图(请求): 如果 request.method == "POST": 表单 = myForm(request.POST, request.FILES) my_file = request.FILES['xml'] 如果 form.is_valid(): # 将文件传递到下一个视图的魔法 # 我尝试了会话变量,但我无法通过 # 文件,因为它不能被序列化。 返回 HttpResponseRedirect(reverse('form2')) 开发 my_view2(请求): 经过 # 这里我会从之前的表单中接收数据 # 并根据我的需要处理。

提前致谢。

【问题讨论】:

您似乎正在尝试构建表单向导? 是的,我尝试构建它,但我无法使用自定义数据库存储通过它传递文件。 如果您正在尝试表单向导,为什么不使用django-formtools?这曾经是 django 核心的一部分,但被删除并分离成一个独立的包。 django-formtools.readthedocs.org/en/latest 是的,我安装了它们,因为默认情况下它们不附带 django,但我可以将它们安装到自定义数据库存储中,我读到表单向导不适用于文件。你有任何 sn-p 吗?这是我正在使用的文件存储的链接。 github.com/victor-o-silva/db_file_storage。提前致谢。 【参考方案1】:

您不能将发布的文件保留在 HTTP 重定向上 - 这是 HTTP 的工作原理。

如果重定向不是绝对必要的,可以直接从第一个视图函数调用第二个视图函数:

# View that handles post data
dev my_view(request):
    if request.method == "POST":
        form = myForm(request.POST, request.FILES)
        my_file = request.FILES['xml']
        if form.is_valid():
            # Magic for passing files to the next view
            # I tried with session variables, but I couldn't pass
            # the file, as it couldn't be serialized.
            return my_view2(request)   # <<<<<<< directly call the second view

dev my_view2(request):
    pass
    # Here I'd receive the data from the previous form
    # and handle it according to my needs.

【讨论】:

我试图返回一个视图,我解释了我遇到的问题,请检查我的答案。提前致谢。

以上是关于django:通过 HttpResponseRedirect 传递发布的文件的主要内容,如果未能解决你的问题,请参考以下文章

Django / JS:通过url从.js文件传递参数到django视图[重复]

为啥通过 django QuerySet 进行查询比在 Django 中使用游标慢得多?

django通过javascript登录[重复]

如何通过 Django 迁移执行 git 命令?

通过命令行创建Django项目

axios通过django的csrf验证