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视图[重复]