将动态变量全局存储在Django中



如何在Django中全局存储变量,以便我可以访问所有Django文件中的变量?例如,当在views.py中将变量声明为全局变量时,它在包括routing.py>consumers.py。注意:我使用的是websocket和channel

要存储的变量是一个包含类(客户端(及其单独套接字连接(而不是websocket(的列表,因此无法将其存储在数据库中

我正在制作一个反向外壳的网络版本。受害者/客户端将连接到服务器,我将能够通过套接字连接向他们发送命令。它在普通终端中运行得非常好,就像我一开始创建项目的地方一样

有人知道怎么做吗?

all_clients = []
class Client():
def __init__(self, clientSocket, name, ip, port, permission, time_when_connected):
self.clientSocket = clientSocket
self.name = name
self.ip = ip
self.port = port
self.permission = permission
self.time_when_connected = time_when_connected

在目标模块中,用字典替换列表all_clients。将您的所有客户存储在其中作为参考:

clients = { 'all': [] }
# all_clients = []

当从另一个模块((使用时,数据通过模块导入保持不变

from client_app.views import clients #above object
all_clients = clients['all'] 

由于在python运行时中的引用,这不能确保返回";当前";客户端对象在与"客户端"对象相同的模块内创建函数;客户端";参考:

clients = { 'all': [] }
# all_clients = []
def get_all_clients():
return clients['all']

您可以应用一些兄弟函数来提供帮助:

def add_client(entity):
clients['all'].append(entity)

其他模块中,导入并使用以下功能:

from client_app.views import get_all_clients, add_client
c = Client()
add_client(c)
all_clients = get_all_clients()
assert c in all_clients

这是由于Lists的对象引用,可以在此处了解更多信息:https://docs.python.org/3/faq/programming.html#how-do-i-shea-全局变量-交叉模块。

列表是可变的,但由于导入了目标模块,对列表的引用可能不会产生对其他模块的引用:Python:从其他模块导入列表

然而,上面的模式运行得非常好。

最新更新