django中的全局变量(单例)

时间:2016-04-06 11:17:05

标签: python django

我有django app。 应用程序 - 具有授权的站点客户端 应用程序包含一些定期运行的方法,但所有方法都创建了auth对象,例如:方法运行10次,重新自动化10次。 我尝试了存储该对象的会话但得到错误:

def get_api_instance(request):
    if 'api' not in request.session: 
        api = auth()
        request.session['api'] = api
    return request.session['api']


<****api.api.Api object at 0x7fe30d155550> is not JSON serializable

你能推荐什么吗?

UPD: 在简单的python脚本中,我可以创建全局变量:

api_var = None

def get_api():
   if not api_var:
      api_var = auth()
   return api_var

def periodic():
   api = get_api_var()
   ....

1 个答案:

答案 0 :(得分:1)

您可以向User对象添加一个函数来获取Auth类实例,您也可以使用propery缓存只创建一次:

from django.contrib.auth.models import User
from django.utils.functional import cached_property

def user_get_auth(self):
    # Initialze the Auth class here

    return Auth()


User.add_to_class("get_auth", cached_property(user_get_auth))

在views.py或模板中,您可以通过以下方式获取Auth类:

request.user.get_auth.some_method()