Django/Python:在不同时间使用用户上传的文件用于两个不同的视图方法

Django/Python: Use file uploaded by the user for two different view methods at different times

本文关键字:用于 文件 两个 方法 视图 Python 同时间 用户 Django      更新时间:2023-09-26

我的模板中有一个表单。用户上传一个文件,当它提交时,我通过Ajax调用一个视图方法,因为我不希望页面重新加载,这工作得很好。

$("#formi").submit(function(event){
   event.preventDefault();
    var data = new FormData($('form').get(0));
        $.ajax({
             type:"POST",
             url:"{% url 'do_some' %}",
             data: data,
             processData: false,
             contentType: false,
             csrfmiddlewaretoken: '{{ csrf_token }}',
             success: function(data){
                 ...},

问题来了,当我想调用另一个视图传递相同的数据(文件上传),但我不希望用户再次上传文件。我将尽量详细说明这一点:

假设您有一个表单,用户上传了一个文件,提交了它,屏幕上出现了两个新的按钮。有了这两个新按钮,现在您可以在页面上移动(向右或向左)。按右键,从"主页"页面移动到"关于"页面,但页面不会重新加载,它都在相同的HTML中。

在第一次提交表单时调用一个大函数来填充"About"页面、"Contact"页面等需要花费很多时间。我想使用的数据来填写第一页快速,然后点击右键,并填写下一页快速等。我想做的是"保存"数据的地方,并使用它时,例如,"右"按钮被点击。

我没有为这个网页使用数据库。用户提供的数据是敏感的,因此不能存储。它将在用户退出页面时消失

所以,问题:有一种方法,我可以使用相同的数据,我从另一个按钮的形式?也许可以使用该按钮作为第二个表单,并将文件从第一个表单传递到这个表单,并在单击时"提交"?保存这个文件在我的python代码和使用它只有当那个按钮被点击?有没有一种方法可以延迟视图方法的执行,这样代码就不会一起运行了?

也许这是一个简单的问题,我想太多了

如果您不想稍后处理上传的文件,则必须将其保存在某个地方,要么保存在数据库中,要么保存在硬盘驱动器中,要么保存在缓存中。你不能依赖一些全局django变量,因为它不能保证在请求之间存活(整个WSGI服务器上的worker,线程可以在请求之间重新加载,这取决于你的WSGI服务器设置)。

如果你想确保没有人会从你的服务器上检索到这个文件,你可以加密它。在文件上传时,使用一些随机字符串加密它并将加密文件保存在您的服务器上,在响应中发送回加密密钥(例如,您可以将其保存在用户cookie中),因此任何将再次使用该文件的请求都必须包含适当的密钥。