A api update

pull/22/head
雷二猛 2019-12-18 09:21:17 +08:00
parent 550c74ae89
commit c5e68f7f13
5 changed files with 55 additions and 7 deletions

View File

@ -5,12 +5,20 @@ from apps.app.models import App
class DeployRequest(models.Model, ModelMixin): class DeployRequest(models.Model, ModelMixin):
STATUS = (
('-2', '发布失败'),
('-1', '已驳回'),
('1', '待审核'),
('2', '待发布'),
('3', '已完成'),
)
app = models.ForeignKey(App, on_delete=models.CASCADE) app = models.ForeignKey(App, on_delete=models.CASCADE)
name = models.CharField(max_length=50) name = models.CharField(max_length=50)
extra1 = models.TextField() extra = models.TextField()
extra2 = models.TextField()
host_ids = models.TextField() host_ids = models.TextField()
desc = models.CharField(max_length=255, null=True) desc = models.CharField(max_length=255, null=True)
status = models.CharField(max_length=2, choices=STATUS)
reason = models.CharField(max_length=255, null=True)
created_at = models.CharField(max_length=20, default=human_time) created_at = models.CharField(max_length=20, default=human_time)
created_by = models.ForeignKey(User, models.PROTECT, related_name='+') created_by = models.ForeignKey(User, models.PROTECT, related_name='+')

View File

@ -0,0 +1,7 @@
from django.urls import path
from .views import *
urlpatterns = [
path('request/', RequestView.as_view()),
]

View File

@ -1,23 +1,54 @@
from django.views.generic import View from django.views.generic import View
from django.db.models import F
from libs import json_response, JsonParser, Argument from libs import json_response, JsonParser, Argument
from apps.deploy.models import DeployRequest from apps.deploy.models import DeployRequest
from apps.app.models import App
import json import json
class RequestView(View): class RequestView(View):
def get(self, request): def get(self, request):
requests = DeployRequest.objects.all() data = []
return json_response(requests) for item in DeployRequest.objects.annotate(
env_name=F('app__env__name'),
app_name=F('app__name'),
app_host_ids=F('app__host_ids'),
app_extend=F('app__extend'),
created_by_user=F('created_by__nickname')):
tmp = item.to_dict()
tmp['env_name'] = item.env_name
tmp['app_name'] = item.app_name
tmp['app_extend'] = item.app_extend
tmp['extra'] = json.loads(item.extra)
tmp['host_ids'] = json.loads(item.host_ids)
tmp['app_host_ids'] = json.loads(item.app_host_ids)
tmp['status_alias'] = item.get_status_display()
tmp['created_by_user'] = item.created_by_user
data.append(tmp)
return json_response(data)
def post(self, request): def post(self, request):
form, error = JsonParser( form, error = JsonParser(
Argument('id', type=int, required=False),
Argument('app_id', type=int, help='缺少必要参数'),
Argument('name', help='请输申请标题'), Argument('name', help='请输申请标题'),
Argument('extra1', help='缺少必要参数'), Argument('extra', type=list, help='缺少必要参数'),
Argument('extra2', help='缺少必要参数'),
Argument('host_ids', type=list, filter=lambda x: len(x), help='请选择要部署的主机'), Argument('host_ids', type=list, filter=lambda x: len(x), help='请选择要部署的主机'),
Argument('desc', required=False), Argument('desc', required=False),
).parse(request.body) ).parse(request.body)
if error is None: if error is None:
app = App.objects.filter(pk=form.app_id).first()
if not app:
return json_response(error='未找到该应用')
form.status = '1' if app.is_audit else '2'
form.extra = json.dumps(form.extra)
form.host_ids = json.dumps(form.host_ids) form.host_ids = json.dumps(form.host_ids)
DeployRequest.objects.create(**form) if form.id:
DeployRequest.objects.filter(pk=form.id).update(
created_by=request.user,
reason=None,
**form
)
else:
DeployRequest.objects.create(created_by=request.user, **form)
return json_response(error=error) return json_response(error=error)

View File

@ -39,6 +39,7 @@ INSTALLED_APPS = [
'apps.alarm', 'apps.alarm',
'apps.config', 'apps.config',
'apps.app', 'apps.app',
'apps.deploy',
] ]
MIDDLEWARE = [ MIDDLEWARE = [

View File

@ -25,4 +25,5 @@ urlpatterns = [
path('setting/', include('apps.setting.urls')), path('setting/', include('apps.setting.urls')),
path('config/', include('apps.config.urls')), path('config/', include('apps.config.urls')),
path('app/', include('apps.app.urls')), path('app/', include('apps.app.urls')),
path('deploy/', include('apps.deploy.urls')),
] ]