Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/351.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 同时为多个用户处理生成的文件_Python_Django - Fatal编程技术网

Python 同时为多个用户处理生成的文件

Python 同时为多个用户处理生成的文件,python,django,Python,Django,我正在开发一个网站,使用django 1.8和python3.4以及anaconda环境。基本上,用户输入参数并提交后,会生成文件和绘图并显示在网页上。然后用户可以下载文件和图像 我处理文件存储的方法是将它们存储为静态文件,并将它们命名为“result.csv”和“plot.png”。根据用户的请求,这些文件完全不同。但是,如果多个用户同时请求某个内容,系统只保存一个带有名称的文件。这是非常危险的 我没有处理这种情况的洞察力。有人能给我一些建议或指导吗?多谢各位 有几种方法可以实现这一点。首先想

我正在开发一个网站,使用django 1.8和python3.4以及anaconda环境。基本上,用户输入参数并提交后,会生成文件和绘图并显示在网页上。然后用户可以下载文件和图像

我处理文件存储的方法是将它们存储为静态文件,并将它们命名为“result.csv”和“plot.png”。根据用户的请求,这些文件完全不同。但是,如果多个用户同时请求某个内容,系统只保存一个带有名称的文件。这是非常危险的


我没有处理这种情况的洞察力。有人能给我一些建议或指导吗?多谢各位

有几种方法可以实现这一点。首先想到的是,假设您希望每个用户保留一组结果(即最后生成的结果)

1-根据用户id创建唯一的名称。这允许您访问文件,而无需首先查阅数据库中的用户数据

它还具有不必删除以前版本的文件的优点

2-使用
uuid
库模块创建唯一的文件名

import uuid
user_filename = uuid.uuid4()
csv_filename = user_filename+'.csv'
png_filename = user_filename+'.png'
并将
user\u文件名
存储在数据库用户记录中,以备以后访问

3-执行相同的操作,但使用具有足够分辨率的时间戳

或者,您可以创建一个具有唯一名称的子目录,并使用静态名称存储其中的文件

选项2和3要求您在为同一用户生成新文件时删除以前版本的文件


正如@Wtower所提到的,将文件存储在媒体目录中,可能在另一个子目录下。

我个人会将它们存储在媒体文件夹中。@Wtower文件和图像不是由用户上传的,它们是由系统生成的,是否应该放在媒体文件夹中?如果它们是生成的,而不是上载的,又有什么关系呢?使用static文件夹,下次进行新部署并运行collect static时,以前生成的文件会发生什么情况?您必须手动解决此问题。@Wtower,我认为您是对的,但非常痛苦的是,当用户同时提交不同的请求时,所有用户只能得到一种结果,因为我总是将生成的文件命名为“result.csv”。因此,用户的旧文件将被其他用户的新文件覆盖。我倾向于同意Pynchia的答案。谢谢@Pynchia。实际上,文件的前一个版本不需要存储,我建议使用第二个和第三个解决方案。但我不明白你为什么说选项2和3需要删除以前的版本。您的意思是前一个文件会自动删除吗?还有一个问题,“用户文件名”是随机生成的,如果它存储在数据库中,如何使用它进行以后的访问?我的应用程序不在数据库中存储用户信息,我使用IP限制来管理用户。好的,然后使用IP作为用户ID并使用它命名文件。在第一种情况下,使用用户ID(无论以何种形式),同一用户始终具有文件名,因此当同一用户再次使用该服务时,新生成的文件将写入以前的文件,您不必清理/管理重复的文件!但是我根本没有使用use id,因为我不知道use id如何参与唯一id的生成。我可以问一下如何使用user id让同一用户拥有固定的uuid,而不是每次都创建一个新文件吗@品夏