v0.1 基础版本

v0.1 基础版本
This commit is contained in:
何全
2019-03-02 12:02:55 +08:00
parent 16f25e8147
commit a059c74cb4
2331 changed files with 524759 additions and 2 deletions

0
assets/__init__.py Normal file
View File

4
assets/admin.py Normal file
View 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
View File

@@ -0,0 +1,5 @@
from django.apps import AppConfig
class AssetsConfig(AppConfig):
name = 'assets'

27
assets/form.py Normal file
View 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

View File

31
assets/models.py Normal file
View 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

View File

View 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
View File

@@ -0,0 +1,3 @@
from django.test import TestCase
# Create your tests here.

12
assets/urls.py Normal file
View 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
View 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))