【发布时间】:2021-12-03 11:52:48
【问题描述】:
我想通过 Django 模型 Device 将网络设备数据存储到我的数据库中。
工作流程
- 主机配置需要由用户在视图中设置(主机模型)
- 主机配置完成后,应扫描网络以查找设备(设备型号)
- 数据应存储在数据库中
问题:
函数create_devices()只允许在配置主机时被调用,但if Host.objects.values():不起作用。
- 只有一个主机模型存在时,如何才能调用函数
create_devices()? - 在没有用户交互的情况下使用视图将动态和静态数据存储到数据库中是否正确?
型号:
class Host(models.Model):
hostname = models.CharField(default="noads", max_length=6)
ipv4_address = models.GenericIPAddressField('IPv4')
ipv4_subnet = models.GenericIPAddressField('IPv4')
gateway = models.GenericIPAddressField('IPv4')
class Device(models.Model):
hostname = models.CharField(max_length=64)
mac_address = models.CharField(max_length=64)
ipv4_address = models.GenericIPAddressField('IPv4')
我的观点:
from webapp.models import Host, Device
from django.views import View
from django.views.generic.detail import DetailView
import multiprocessing.dummy
import multiprocessing
def create_devices():
"""
Creates DB entry of devices if they dont already exist
:return: List of mulitple devices stored in objects
:rtype: list ["Device", "Device", ...]
"""
available_devices = get_available_devices_in_list()
arp_table_of_all_hosts = get_arp_table_linux()
dev_list = []
for deviceip in available_devices:
#If device already exists in DB continue
if arp_table_of_all_hosts.get(deviceip):
if arp_table_of_all_hosts[deviceip] in Device.objects.filter(mac_address = arp_table_of_all_hosts[deviceip]):
continue
else:
devmac = arp_table_of_all_hosts[deviceip]
devname = "unknown" #socket.gethostbyaddr(deviceip)
dev = Device(hostname=devname, mac_address=devmac, ipv4_address=deviceip)
dev.save()
dev_list.append(dev)
return dev_list
class DeviceGetAll(DetailView):
if Host.objects.values():
create_devices()
model = Device
pass
【问题讨论】:
标签: python django django-models django-views