在 Django 中全局存储动态变量
Store dynamic variables in Django globally
如何在 Django 中全局存储变量,以便我可以访问所有 Django 文件中的变量?
例如,在 views.py 中将变量声明为全局变量时,它在其他文件(包括 routing.py>consumers.py 中没有相同的内存。注意:我正在使用 websockets 和通道。
要存储的变量是一个列表,其中包含 类(客户端)及其各自的套接字连接(不是 websocket),因此无法将其存储在数据库中。
我正在制作反向 shell 的网络版本。然后 victims/clients 将连接到服务器,我将能够通过套接字连接向它们发送命令。它在常规终端中工作得非常好,因为它是我一开始创建项目的地方。
有人知道怎么做吗?
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 运行时内的引用,这不能确定 return “当前”客户端对象的真实引用,因此在与“客户”参考相同的模块中创建一个函数:
clients = { 'all': [] }
# all_clients = []
def get_all_clients():
return clients['all']
您可以应用一些兄弟函数来帮助:
def add_client(entity):
clients['all'].append(entity)
在您的 other 模块中,导入并使用函数:
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-share-global-variables-across-modules.
列表是可变的,但由于目标模块的导入,对列表的引用可能不会产生另一个模块的引用:
但是上面的模式非常有效。
如何在 Django 中全局存储变量,以便我可以访问所有 Django 文件中的变量?
例如,在 views.py 中将变量声明为全局变量时,它在其他文件(包括 routing.py>consumers.py 中没有相同的内存。注意:我正在使用 websockets 和通道。
要存储的变量是一个列表,其中包含 类(客户端)及其各自的套接字连接(不是 websocket),因此无法将其存储在数据库中。
我正在制作反向 shell 的网络版本。然后 victims/clients 将连接到服务器,我将能够通过套接字连接向它们发送命令。它在常规终端中工作得非常好,因为它是我一开始创建项目的地方。
有人知道怎么做吗?
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 运行时内的引用,这不能确定 return “当前”客户端对象的真实引用,因此在与“客户”参考相同的模块中创建一个函数:
clients = { 'all': [] }
# all_clients = []
def get_all_clients():
return clients['all']
您可以应用一些兄弟函数来帮助:
def add_client(entity):
clients['all'].append(entity)
在您的 other 模块中,导入并使用函数:
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-share-global-variables-across-modules.
列表是可变的,但由于目标模块的导入,对列表的引用可能不会产生另一个模块的引用:
但是上面的模式非常有效。