读取函数外部的变量

时间:2019-03-11 15:00:32

标签: python django

我正在尝试读取这样的内存文件:

sttr=request.FILES['file_field'].read()

现在,我希望sttr可以运行,除非网站关闭或关闭了特定时间。我不能将其全局化,因为它发生在数据泄露的情况下,我不想将其存储在数据库中,只需读取它并将其存储在一个变量中,然后将该变量传递给views.py中的另一个函数,我就可以不使用会话,因为我没有针对key的特定session[key]。是否还有其他方法可以从另一个views.py中的内存文件中获取数据,例如

def mainpage(request):
     sttr=request.FILES['file_field'].read()

def hh(request):
     print(sttr)

不将sttr设为全局吗?

1 个答案:

答案 0 :(得分:1)

要在请求之间共享某些数据,必须将其存储在某个位置,并且能够以一种或另一种方式进行检索。实际上,您不能使用全局变量(至少不在wsgi应用程序中使用),因为一个wsgi进程服务多个用户(因此user2数据将覆盖user1数据),并且您通常至少拥有六打服务器进程(我在这里谈论的是单服务器设置),因此它们中的任何一个都可以满足给定用户的“下一个”请求,因此您最终将在一个进程中设置全局变量,然后尝试在另一个进程中读取它显然,由于变量是按进程的,因此无法工作。

这就是为什么有人发明了cookie和会话-在请求之间共享或多或少的易失数据的原因。

如果文件大小很小(我的意思是 small -最大几千字节,最好是几千字节),则可以将其内容存储在会话中-提及“我不能使用会话,因为我没有用于session [key]的特定键,这完全是废话,Django的request.session对象就像字典一样,您可以设置所需的任何键,否则将完全没有用。

如果更大,您宁愿在文件系统中的已知位置写入文件内容,并将路径存储在会话中(会话已加载到内存中,您不想破坏服务器的ram GB的用户内容。