mirror of
https://github.com/RobbieHan/sandboxMP.git
synced 2026-02-12 07:04:57 +08:00
Compare commits
2 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
371b1ebbe3 | ||
|
|
9d0bd95b69 |
@@ -1,6 +1,11 @@
|
|||||||
from django.db import models
|
import os
|
||||||
|
from datetime import datetime
|
||||||
|
|
||||||
# Create your models here.
|
from django.db import models
|
||||||
|
from django.contrib.auth import get_user_model
|
||||||
|
from django.dispatch import receiver
|
||||||
|
|
||||||
|
User = get_user_model()
|
||||||
|
|
||||||
|
|
||||||
class AbstractMode(models.Model):
|
class AbstractMode(models.Model):
|
||||||
@@ -20,3 +25,94 @@ class Code(AbstractMode):
|
|||||||
class Meta:
|
class Meta:
|
||||||
verbose_name = '字典'
|
verbose_name = '字典'
|
||||||
verbose_name_plural = verbose_name
|
verbose_name_plural = verbose_name
|
||||||
|
|
||||||
|
|
||||||
|
class TimeAbstract(models.Model):
|
||||||
|
add_time = models.DateTimeField(auto_now_add=True, verbose_name="添加时间")
|
||||||
|
modify_time = models.DateTimeField(auto_now=True, verbose_name="更新时间")
|
||||||
|
|
||||||
|
class Meta:
|
||||||
|
abstract = True
|
||||||
|
|
||||||
|
|
||||||
|
class ConnectionAbstract(models.Model):
|
||||||
|
auth_method_choices = (
|
||||||
|
('private_key', '密钥认证'),
|
||||||
|
('password', '密码认证')
|
||||||
|
)
|
||||||
|
hostname = models.CharField(max_length=50, verbose_name='设备地址(IP或域名)')
|
||||||
|
port = models.IntegerField(default=22, verbose_name='SSH端口')
|
||||||
|
username = models.CharField(max_length=15, blank=True, default='', verbose_name='SSH用户名')
|
||||||
|
password = models.CharField(max_length=80, blank=True, default='', verbose_name='SSH密码')
|
||||||
|
private_key = models.CharField(max_length=100, blank=True, default='', verbose_name='密钥路径')
|
||||||
|
auth_type = models.CharField(max_length=30, choices=auth_method_choices, default='')
|
||||||
|
status = models.CharField(max_length=10, blank=True, default='')
|
||||||
|
|
||||||
|
class Meta:
|
||||||
|
abstract = True
|
||||||
|
|
||||||
|
|
||||||
|
class DeviceAbstract(models.Model):
|
||||||
|
sys_hostname = models.CharField(max_length=50, blank=True, default='', verbose_name='主机名')
|
||||||
|
mac_address = models.CharField(max_length=50, blank=True, default='', verbose_name='MAC地址')
|
||||||
|
sn_number = models.CharField(max_length=50, blank=True, default='', verbose_name='SN号码')
|
||||||
|
os_type = models.CharField(max_length=50, blank=True, default='', verbose_name='系统类型')
|
||||||
|
device_type = models.CharField(max_length=50, blank=True, default='', verbose_name='设备类型')
|
||||||
|
|
||||||
|
class Meta:
|
||||||
|
abstract = True
|
||||||
|
|
||||||
|
|
||||||
|
class DeviceScanInfo(ConnectionAbstract, DeviceAbstract, TimeAbstract):
|
||||||
|
error_message = models.CharField(max_length=80, blank=True, default='', verbose_name='错误信息')
|
||||||
|
|
||||||
|
class Meta:
|
||||||
|
verbose_name = '扫描信息'
|
||||||
|
verbose_name_plural = verbose_name
|
||||||
|
|
||||||
|
|
||||||
|
class ConnectionInfo(ConnectionAbstract, TimeAbstract):
|
||||||
|
|
||||||
|
class Meta:
|
||||||
|
verbose_name = 'SSH连接信息'
|
||||||
|
verbose_name_plural = verbose_name
|
||||||
|
|
||||||
|
|
||||||
|
class Cabinet(models.Model):
|
||||||
|
number = models.CharField(max_length=50, verbose_name='机柜编号')
|
||||||
|
position = models.CharField(max_length=80, verbose_name='机柜位置')
|
||||||
|
desc = models.TextField(blank=True, default='', verbose_name='备注信息')
|
||||||
|
|
||||||
|
class Meta:
|
||||||
|
verbose_name = '机柜信息'
|
||||||
|
verbose_name_plural = verbose_name
|
||||||
|
|
||||||
|
|
||||||
|
class DeviceInfo(AbstractMode, DeviceAbstract, TimeAbstract):
|
||||||
|
hostname = models.CharField(max_length=50, verbose_name='设备地址(IP或域名)')
|
||||||
|
network_type = models.IntegerField(blank=True, null=True, verbose_name='网络类型')
|
||||||
|
service_type = models.IntegerField(blank=True, null=True, verbose_name='服务类型')
|
||||||
|
operation_type = models.IntegerField(blank=True, null=True, verbose_name='业务类型')
|
||||||
|
leader = models.IntegerField(blank=True, null=True, verbose_name='责任人')
|
||||||
|
dev_cabinet = models.IntegerField(blank=True, null=True, verbose_name='机柜信息')
|
||||||
|
dev_connection = models.IntegerField(blank=True, null=True, verbose_name='连接信息')
|
||||||
|
buyDate = models.DateField(default=datetime.now, verbose_name="购买日期")
|
||||||
|
warrantyDate = models.DateField(default=datetime.now, verbose_name="到保日期")
|
||||||
|
desc = models.TextField(blank=True, default='', verbose_name='备注信息')
|
||||||
|
|
||||||
|
class Meta:
|
||||||
|
verbose_name = '设备信息'
|
||||||
|
verbose_name_plural = verbose_name
|
||||||
|
|
||||||
|
|
||||||
|
class DeviceFile(TimeAbstract):
|
||||||
|
device = models.ForeignKey('DeviceInfo', blank=True, null=True, on_delete=models.SET_NULL, verbose_name='设备')
|
||||||
|
file_content = models.FileField(upload_to="asset_file/%Y/%m", null=True, blank=True, verbose_name="资产文件")
|
||||||
|
upload_user = models.CharField(max_length=20, verbose_name="上传人")
|
||||||
|
|
||||||
|
|
||||||
|
@receiver(models.signals.post_delete, sender=DeviceFile)
|
||||||
|
def auto_delete_file(sender, instance, **kwargs):
|
||||||
|
if instance.file_content:
|
||||||
|
if os.path.isfile(instance.file_content.path):
|
||||||
|
os.remove(instance.file_content.path)
|
||||||
|
|||||||
@@ -15,8 +15,8 @@ class CodeView(LoginRequiredMixin, BreadcrumbMixin, TemplateView):
|
|||||||
template_name = 'cmdb/code.html'
|
template_name = 'cmdb/code.html'
|
||||||
|
|
||||||
def get_context_data(self):
|
def get_context_data(self):
|
||||||
context = dict(code_parent=Code.objects.filter(parent=None))
|
self.kwargs['code_parent'] = Code.objects.filter(parent=None)
|
||||||
return context
|
return super().get_context_data(**self.kwargs)
|
||||||
|
|
||||||
|
|
||||||
class CodeCreateView(SandboxCreateView):
|
class CodeCreateView(SandboxCreateView):
|
||||||
|
|||||||
@@ -0,0 +1 @@
|
|||||||
|
default_app_config = 'system.apps.SystemConfig'
|
||||||
|
|||||||
@@ -2,4 +2,10 @@ from django.apps import AppConfig
|
|||||||
|
|
||||||
|
|
||||||
class SystemConfig(AppConfig):
|
class SystemConfig(AppConfig):
|
||||||
name = 'apps.system'
|
name = 'system'
|
||||||
|
|
||||||
|
def ready(self):
|
||||||
|
from .signals import create_menu
|
||||||
|
from .signals import user_logged_in_handler
|
||||||
|
from .signals import user_logged_out_handler
|
||||||
|
from .signals import user_login_failed_handler
|
||||||
|
|||||||
50
apps/system/signals.py
Normal file
50
apps/system/signals.py
Normal file
@@ -0,0 +1,50 @@
|
|||||||
|
import logging
|
||||||
|
|
||||||
|
from django.dispatch import receiver
|
||||||
|
from django.db.models.signals import post_save
|
||||||
|
from django.contrib.auth.signals import user_logged_in, user_logged_out, user_login_failed
|
||||||
|
|
||||||
|
from .models import Role, Menu
|
||||||
|
|
||||||
|
error_logger = logging.getLogger('sandbox_error')
|
||||||
|
info_logger = logging.getLogger('sandbox_info')
|
||||||
|
|
||||||
|
|
||||||
|
@receiver(post_save, sender=Menu)
|
||||||
|
def create_menu(sender, instance, **kwargs):
|
||||||
|
queryset = Role.objects.filter(id=1)
|
||||||
|
try:
|
||||||
|
admin_role = queryset.get()
|
||||||
|
admin_role.permissions.add(instance)
|
||||||
|
except queryset.model.DoesNotExist as e:
|
||||||
|
error_logger.error(e)
|
||||||
|
|
||||||
|
|
||||||
|
@receiver(user_logged_in)
|
||||||
|
def user_logged_in_handler(sender, request, user, **kwargs):
|
||||||
|
ip = request.META.get('REMOTE_ADDR')
|
||||||
|
msg = 'login user: {user}, remote ip: {ip}, action: login, status: successed'.format(
|
||||||
|
user=user.username,
|
||||||
|
ip=ip,
|
||||||
|
)
|
||||||
|
info_logger.info(msg)
|
||||||
|
|
||||||
|
|
||||||
|
@receiver(user_logged_out)
|
||||||
|
def user_logged_out_handler(sender, request, user, **kwargs):
|
||||||
|
ip = request.META.get('REMOTE_ADDR')
|
||||||
|
msg = 'login user: {user}, remote ip: {ip}, action: logout, status: successed'.format(
|
||||||
|
user=user.username,
|
||||||
|
ip=ip,
|
||||||
|
)
|
||||||
|
info_logger.info(msg)
|
||||||
|
|
||||||
|
|
||||||
|
@receiver(user_login_failed)
|
||||||
|
def user_login_failed_handler(sender, credentials, request, **kwargs):
|
||||||
|
msg = 'logout failed for: {credentials}'.format(
|
||||||
|
credentials=credentials,
|
||||||
|
)
|
||||||
|
|
||||||
|
info_logger.info(msg)
|
||||||
|
|
||||||
@@ -40,6 +40,7 @@ class LoginView(View):
|
|||||||
redirect_to = request.GET.get('next', '/')
|
redirect_to = request.GET.get('next', '/')
|
||||||
login_form = LoginForm(request.POST)
|
login_form = LoginForm(request.POST)
|
||||||
ret = dict(login_form=login_form)
|
ret = dict(login_form=login_form)
|
||||||
|
print(request.META.get('REMOTE_ADDR'))
|
||||||
if login_form.is_valid():
|
if login_form.is_valid():
|
||||||
user_name = request.POST['username']
|
user_name = request.POST['username']
|
||||||
pass_word = request.POST['password']
|
pass_word = request.POST['password']
|
||||||
|
|||||||
Reference in New Issue
Block a user