Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/19.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 Django with Apache:view.py中的全局变量_Python_Django_Apache_Dictionary - Fatal编程技术网

Python Django with Apache:view.py中的全局变量

Python Django with Apache:view.py中的全局变量,python,django,apache,dictionary,Python,Django,Apache,Dictionary,请我需要一些帮助,我有一个经典的用户管理功能(帐户创建,登录,…)的网络应用程序。我的问题是,当每个用户连接(登录)时,我试图为他创建一个对象“UserObject”(非可序列化对象)的实例,该对象将用于处理某些视图中的用户请求,因此该对象必须可以从任何视图访问,因为我有一个全局字典“users\u objects”在包含所有用户对象的view.py中(dictionary键是用户名,值是“UserObject”对象),因此view.py如下所示: from user_object import

请我需要一些帮助,我有一个经典的用户管理功能(帐户创建,登录,…)的网络应用程序。我的问题是,当每个用户连接(登录)时,我试图为他创建一个对象“UserObject”(非可序列化对象)的实例,该对象将用于处理某些视图中的用户请求,因此该对象必须可以从任何视图访问,因为我有一个全局字典“users\u objects”在包含所有用户对象的view.py中(dictionary键是用户名,值是“UserObject”对象),因此view.py如下所示:

from user_object import UserObject

users_objects = {}

def login(request):

    //login control and creation of session and context
    ......
    ......
    global users_objects
    user_name = request.session['name']
    users_objects[user_name] = UserObject()
    return render(request, 'mySite/home.html', context)

def request_view(request):

    param = request.GET.get('parameter', None)
    global users_objects
    user_name = request.session['name']
    obj = users_objects[user_name]
    res = obj.process(param)
    return HttpResponse(str(res))
这种方法在django-dev服务器上运行良好,但是当我使用真实的生产服务器(apache)配置django时,全局字典“users\u-objects”的内容消失了,我得到了一个空字典。拜托,有人知道为什么会这样吗??使用全球词典的最佳解决方案是什么 在django??
提前感谢

之所以会发生这种情况,是因为mod_wsgi使用多个进程运行您的应用程序,每个进程都有自己的变量空间


但没有理由这么做。数据存储在数据库中,不要将其放在全局对象中。

感谢您的回复,“UserObject”对象是一个不可序列化的对象,此外,当我实例化一个新的“UserObject”时,将建立到远程服务器的连接,我需要保持此连接以处理用户请求,所以我无法将对象存储在数据库中。嗯,这不起作用。在多进程环境中,绝对不能保证您将获得最初创建对象的相同进程。你需要重新思考你的结构;您可能需要将数据保存在本地数据库中,并在每次需要处理某些内容时与远程服务器建立短期连接。解决此问题的一个快速方法是确保使用mod_wsgi的守护程序模式,但不是Daniel解释的长期解决方案。这需要一个过程。守护进程模式也是首选的部署机制。您不应该使用默认的嵌入式模式。谢谢你的回复,Graham,这正是我所需要的,只是为了演示的目的。那么,如果apache运行多个进程,这是否意味着每个进程都有单独的django项目实例?