python-Django跨文件全局变量管理

本文介绍了如何在Python Django项目中创建一个全局变量管理模块,通过`globalvar.py`来初始化、设置、获取和删除全局变量,确保在不同模块间共享数据。全局变量在`__init__.py`中初始化,保证项目启动时自动加载。在views和test等文件中可以直接使用这些全局变量,方便在多个视图或函数间传递信息。
摘要由CSDN通过智能技术生成

背景

python 中 global 关键字可以定义一个变量为全局变量,但是仅限于在当前模块(py文件)中调用全局变量,如果在另外一个py文件中,再次使用 global x 是无法访问到的,因为在这个py模块中并没有一个叫做x的变量,于是就会报错,参数未定义。

借鉴global的思路,既然在一个文件中可以生效,那么我们可以专门为全局变量定义一个全局变量管理模块

本文示例主要是基于Django框架项目作为例子, 便于在实战应用, 需要的朋友可以借鉴。

创建全局变量管理模块 globalvar

在app应用下创建 globalvar.py文件: 写入以下函数,其实都是字典的基本操作功能。

def __init(**kwargs):
    """
    初始化全局变量 【Dict】
    :param kwargs: 初始化参数 k=v
    :return: 
    """
    global _globals_dict
    _globals_dict = kwargs if kwargs else {}
    

def set_value(key, value):
    """
    设置
    :param key: Key
    :param value: Value
    :return: 
    """
    _globals_dict[key] = value


def get_value(key, default=None):
    """
    获取单个
    :param key: Key
    :param default: None
    :return: 
    """
    try:
        return _globals_dict[key]
    except KeyError:
        return default
    
    
def get_all(default=None):
    """
    获取全部
    :param default: None
    :return: 
    """
    try:
        return _globals_dict
    except Exception:
        return default


def pop_value(key, default=None):
    """
    删除单个key
    :param key: Key
    :param default: None
    :return: 
    """
    try:
        return _globals_dict.pop(key)
    except KeyError:
        return default


def clear():
    """清空"""
    _globals_dict.clear()

初始化全局变量模块

​ 在其他任意文件中调用上面的__init()都会初始化一个全局变量Dict(不传参数就是空字典)。但是有的时候,只是让它初始化一次就OK,而且如何保证在Django项目启动时,自动初始化全局变量模块?

​ 其实也好解决,在你的app应用下或者与项目同名的文件下,有一个__init__.py文件,只需要在这里调用函数,在项目启动时就会自动初始化。一般初始化多用于全局变量、数据库连接、数据初始化等。

这里是在 app/__init__.py 下进行初始化:

from app import globalvar as gl

gl.__init()		# 初始化全局变量dict

可能会发现方法被调用了两次,这是因为你使用了python manage.py runserver该运行方式启动项目,这种方式会启动两个进程,其中一个进程用于监听用户修改代码后重新启动,但在真实环境中使用uwsgi启动项目则只会调用一次。如果你不愿意启动两个进程,也可以使用 python manage.py runserver --noreload 启动项目, --noreload关闭监听代码修改重启程序的意思。

使用全局变量模块

在其他文件中可以直接导入,设置、获取等操作全局变量了。

views.py中,简单请求设置,:

from app import globalvar as gl

def set_user(request):

    gl.set_value('username', 'admin')   # 设置

    return HttpResponse('set ok')

test.py文件中,获取测试:

from app import globalvar as gl

def get_user():

    gl_dict = gl.get_all()    # 获取全部
    user = gl.get_value('username')     # 获取单个 
    print(gl_dict, user)	# {'username': 'admin'}  admin
    
get_user()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值