mirror of
https://github.com/hequan2017/seal.git
synced 2026-05-02 06:31:01 +08:00
v0.1 基础版本
v0.1 基础版本
This commit is contained in:
0
assets/__init__.py
Normal file
0
assets/__init__.py
Normal file
4
assets/admin.py
Normal file
4
assets/admin.py
Normal file
@@ -0,0 +1,4 @@
|
||||
from django.contrib import admin
|
||||
from assets.form import Ecs
|
||||
|
||||
admin.site.register(Ecs)
|
||||
5
assets/apps.py
Normal file
5
assets/apps.py
Normal file
@@ -0,0 +1,5 @@
|
||||
from django.apps import AppConfig
|
||||
|
||||
|
||||
class AssetsConfig(AppConfig):
|
||||
name = 'assets'
|
||||
27
assets/form.py
Normal file
27
assets/form.py
Normal file
@@ -0,0 +1,27 @@
|
||||
from django import forms
|
||||
from assets.models import Ecs
|
||||
|
||||
|
||||
class EcsForm(forms.ModelForm):
|
||||
class Meta:
|
||||
model = Ecs
|
||||
fields = '__all__'
|
||||
|
||||
widgets = {
|
||||
'type': forms.Select(
|
||||
attrs={'class': 'select2',
|
||||
'data-placeholder': '----请选择环境----'}),
|
||||
}
|
||||
|
||||
help_texts = {
|
||||
'type': '* 请选择 资产所在平台.',
|
||||
|
||||
}
|
||||
|
||||
def clean_type(self):
|
||||
"""
|
||||
自定义验证
|
||||
:return:
|
||||
"""
|
||||
type = self.cleaned_data['type']
|
||||
return type
|
||||
0
assets/migrations/__init__.py
Normal file
0
assets/migrations/__init__.py
Normal file
31
assets/models.py
Normal file
31
assets/models.py
Normal file
@@ -0,0 +1,31 @@
|
||||
from django.db import models
|
||||
|
||||
|
||||
class Ecs(models.Model):
|
||||
TYPE_CHOICES = (
|
||||
('0', '阿里云'),
|
||||
('1', '腾讯云'),
|
||||
('2', '华为云'),
|
||||
('3', '亚马逊'),
|
||||
('4', '其他'),
|
||||
)
|
||||
hostname = models.CharField(max_length=96, verbose_name='主机名', blank=True, null=True, )
|
||||
type = models.CharField(choices=TYPE_CHOICES, max_length=16, verbose_name='主机类型')
|
||||
instance_id = models.CharField(max_length=64, verbose_name='实例ID', unique=True)
|
||||
instance_name = models.CharField(max_length=96, verbose_name='标签', blank=True, null=True, )
|
||||
os_name = models.CharField(max_length=64, verbose_name='系统版本', blank=True, null=True, )
|
||||
cpu = models.IntegerField(verbose_name='CPU', blank=True, null=True)
|
||||
memory = models.IntegerField(verbose_name='内存', blank=True, null=True)
|
||||
private_ip = models.GenericIPAddressField(verbose_name='内网IP', blank=True, null=True)
|
||||
public_ip = models.GenericIPAddressField(verbose_name='外网IP', blank=True, null=True)
|
||||
|
||||
c_time = models.DateTimeField(auto_now_add=True, null=True, verbose_name='创建时间', blank=True)
|
||||
u_time = models.DateTimeField(auto_now=True, null=True, verbose_name='更新时间', blank=True)
|
||||
|
||||
class Meta:
|
||||
db_table = "ecs"
|
||||
verbose_name = "主机"
|
||||
verbose_name_plural = verbose_name
|
||||
|
||||
def __str__(self):
|
||||
return self.hostname
|
||||
0
assets/templatetags/__init__.py
Normal file
0
assets/templatetags/__init__.py
Normal file
15
assets/templatetags/asset_filter.py
Normal file
15
assets/templatetags/asset_filter.py
Normal file
@@ -0,0 +1,15 @@
|
||||
from django import template
|
||||
from django.apps import apps
|
||||
from assets.models import Ecs
|
||||
register = template.Library()
|
||||
|
||||
|
||||
@register.filter(name='ecs_model_choices')
|
||||
def ecs_model_choices(model_name, choice_name):
|
||||
asset_app = apps.get_app_config('assets')
|
||||
return getattr(asset_app.get_model(model_name), choice_name)
|
||||
|
||||
|
||||
@register.filter(name='ecs_type_choices')
|
||||
def ecs_type_choices(value):
|
||||
return Ecs.TYPE_CHOICES
|
||||
3
assets/tests.py
Normal file
3
assets/tests.py
Normal file
@@ -0,0 +1,3 @@
|
||||
from django.test import TestCase
|
||||
|
||||
# Create your tests here.
|
||||
12
assets/urls.py
Normal file
12
assets/urls.py
Normal file
@@ -0,0 +1,12 @@
|
||||
from django.urls import path
|
||||
from assets import views
|
||||
|
||||
app_name = "assets"
|
||||
|
||||
urlpatterns = [
|
||||
path('ecs-create', views.EcsCreateView.as_view(), name='ecs-create'),
|
||||
path('ecs-list', views.EcsListView.as_view(), name='ecs-list'),
|
||||
path('ecs-update-<int:pk>', views.EcsUpdateView.as_view(), name='ecs-update'),
|
||||
path('ecs-detail-<int:pk>', views.EcsDetailView.as_view(), name='ecs-detail'),
|
||||
path('ecs-delete', views.EcsDeleteView.as_view(), name='ecs-delete'),
|
||||
]
|
||||
135
assets/views.py
Normal file
135
assets/views.py
Normal file
@@ -0,0 +1,135 @@
|
||||
import logging
|
||||
import json
|
||||
from django.urls import reverse_lazy
|
||||
from django.db.models import Q
|
||||
from django.conf import settings
|
||||
from pure_pagination import PageNotAnInteger
|
||||
from pure_pagination import Paginator
|
||||
from django.shortcuts import render, HttpResponse
|
||||
from system.decorator.get_list import get_list
|
||||
from django.contrib.auth.mixins import LoginRequiredMixin, PermissionRequiredMixin
|
||||
from django.views.generic import ListView, View, DetailView, CreateView, UpdateView
|
||||
from assets.models import Ecs
|
||||
from assets.form import EcsForm
|
||||
|
||||
logger = logging.getLogger('assets')
|
||||
|
||||
|
||||
## 关于 cbv 的 文档 http://ccbv.co.uk/projects/Django/2.0/django.views.generic.edit/
|
||||
class EcsCreateView(LoginRequiredMixin, PermissionRequiredMixin, CreateView):
|
||||
"""
|
||||
Ecs 创建
|
||||
"""
|
||||
permission_required = ('assets.add_ecs',)
|
||||
model = Ecs
|
||||
form_class = EcsForm
|
||||
template_name = 'assets/ecs-create.html'
|
||||
success_url = reverse_lazy('assets:ecs-list')
|
||||
|
||||
def get_context_data(self, **kwargs):
|
||||
context = {}
|
||||
if '__next__' in self.request.POST: # 为了获取 点击本页之前的 浏览网页
|
||||
context['i__next__'] = self.request.POST['__next__']
|
||||
else:
|
||||
try:
|
||||
context['i__next__'] = self.request.META['HTTP_REFERER']
|
||||
except Exception as e:
|
||||
logger.error(e)
|
||||
kwargs.update(context)
|
||||
return super().get_context_data(**kwargs)
|
||||
|
||||
def get_success_url(self):
|
||||
return self.request.POST['__next__']
|
||||
|
||||
|
||||
def form_valid(self, form): ## 保存结果 可以进行 手动 修改 再保存
|
||||
obj = form.save(commit=False)
|
||||
obj.save()
|
||||
return super().form_valid(form)
|
||||
|
||||
def form_invalid(self, form):
|
||||
print(form.errors)
|
||||
"""If the form is invalid, render the invalid form."""
|
||||
return self.render_to_response(self.get_context_data(form=form))
|
||||
|
||||
|
||||
|
||||
class EcsListView(LoginRequiredMixin, PermissionRequiredMixin, ListView):
|
||||
permission_required = ('assets.view_ecs',)
|
||||
template_name = 'assets/ecs-list.html'
|
||||
model = Ecs
|
||||
queryset = Ecs.objects.get_queryset().order_by('-id')
|
||||
|
||||
@get_list
|
||||
def get_context_data(self, **kwargs):
|
||||
try:
|
||||
page = self.request.GET.get('page', 1)
|
||||
except PageNotAnInteger as e:
|
||||
page = 1
|
||||
p = Paginator(self.queryset, getattr(settings, 'DISPLAY_PER_PAGE'), request=self.request)
|
||||
ecs_list = p.page(page)
|
||||
|
||||
context = {
|
||||
"ecs_list": ecs_list,
|
||||
'ecs_count': self.queryset.count() if self.queryset != '' else 0,
|
||||
"filter_dict":self.filter_dict
|
||||
}
|
||||
|
||||
kwargs.update(context)
|
||||
return super().get_context_data(**kwargs)
|
||||
|
||||
|
||||
|
||||
class EcsUpdateView(LoginRequiredMixin, PermissionRequiredMixin, UpdateView):
|
||||
"""
|
||||
Ecs 更新
|
||||
"""
|
||||
permission_required = ('assets.change_ecs',)
|
||||
model = Ecs
|
||||
form_class = EcsForm
|
||||
template_name = 'assets/ecs-create.html'
|
||||
|
||||
def get_context_data(self, **kwargs):
|
||||
context = {}
|
||||
if '__next__' in self.request.POST: # 为了获取 点击本页之前的 浏览网页
|
||||
context['i__next__'] = self.request.POST['__next__']
|
||||
else:
|
||||
try:
|
||||
context['i__next__'] = self.request.META['HTTP_REFERER']
|
||||
except Exception as e:
|
||||
logger.error(e)
|
||||
kwargs.update(context)
|
||||
return super().get_context_data(**kwargs)
|
||||
|
||||
|
||||
|
||||
|
||||
class EcsDetailView(LoginRequiredMixin, PermissionRequiredMixin, DetailView):
|
||||
permission_required = ('assets.view_ecs',)
|
||||
model = Ecs
|
||||
form_class = EcsForm
|
||||
template_name = 'assets/ecs-detail.html'
|
||||
|
||||
def get_context_data(self, **kwargs):
|
||||
pk = self.kwargs.get(self.pk_url_kwarg, None)
|
||||
context = {
|
||||
"ecs": self.model.objects.get(id=pk),
|
||||
"nid":pk
|
||||
}
|
||||
kwargs.update(context)
|
||||
return super().get_context_data(**kwargs)
|
||||
|
||||
|
||||
|
||||
class EcsDeleteView(LoginRequiredMixin, PermissionRequiredMixin, View):
|
||||
"""
|
||||
Ecs 删除
|
||||
"""
|
||||
permission_required = ('asset.delete_ecs',)
|
||||
model = Ecs
|
||||
|
||||
def post(self, request):
|
||||
ret = {'status': True, 'error': None, }
|
||||
nid = self.request.POST.get('nid', None)
|
||||
self.model.objects.get(id=nid).delete()
|
||||
return HttpResponse(json.dumps(ret))
|
||||
Reference in New Issue
Block a user