【问题标题】:Django/Python: Use file uploaded by the user for two different view methods at different timesDjango/Python:使用用户上传的文件在不同时间进行两种不同的查看方式
【发布时间】:2015-10-07 13:56:40
【问题描述】:

我的模板中有一个表单。用户上传文件,提交后我通过 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 中。

在第一次提交表单时调用一个大函数来填充“关于”页面、“联系”页面等需要很多时间。我想使用数据快速填充第一页,然后单击右键并快速填充下一页等。我想要做的是在某处“保存”该数据并在例如,单击“右键”按钮。

警告

我不为此网页使用数据库。用户提供的数据是敏感数据,因此无法存储。当用户退出页面时它会消失

所以,问题:有没有办法可以在另一个按钮中使用从表单中获得的相同数据?也许将该按钮用作第二种形式并将文件从第一种形式传递给该形式并在单击时“提交”?将此文件保存在我的python代码中并仅在单击该按钮时使用它? 有没有办法延迟视图方法的弹出,使代码不会一起运行?

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

提前致谢。

【问题讨论】:

  • 你不想存储它,但你希望它被存储?
  • 是的,我错过了那个。不想存储它。也许是一个全局变量,我可以在其中保存文件并一直使用它?

标签: javascript jquery python django


【解决方案1】:

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

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

【讨论】:

  • 我将尝试获取有关如何将其保存在缓存中的更多信息
  • 您对 memcached 有何看法?我可以将文件保存为一个值并将其用于每种方法吗?
  • 这取决于您的文件,但您将存储该文件的确切位置并不重要。
  • 只是一个 .txt 文件,当用户在该页面时,我在每个方法中都使用它,我需要专业人士的意见,这就是我不断向您询问的原因。谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-25
  • 2012-01-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多