zoukankan      html  css  js  c++  java
  • Django实现自动发布(2视图-服务版本查找和新增)

    前面做好了服务的管理,接下来是服务版本的管理,和服务类似,版本也有增删改查。先在服务的管理页面做一个入口,如下图:

    需要在上一步的服务管理页面增加按钮、按钮方法,点击按钮跳转时要打开一个新的页面,所以还要增加对应的页面视图。

    页面方法

    templates/microservice/service.html 的标签<script type="text/html" id="barDemo">后面 增加内容

      <a class="layui-btn layui-btn-xs " lay-event="version">版本管理</a>
    

    相应的点击方法也加到工具条事件:

    if (layEvent === 'version') {
      handleShowVersion(obj);
    }
    
    function handleShowVersion(obj){
      var url = '{% url "page_service_versions" 0 %}';
      url = url.replace('0', obj.data.id);
      layer.open({
        type: 2, // 0(信息框,默认)1(页面层)2(iframe层)3(加载层)4(tips层)
        content: url,    // 设置跳转的url,跳转到对应的页面
        area: ["80%", "100%"],
        shadeClose: true, // 点击弹出层的shade可关闭弹出层
      })
    }
    

    页面视图

    增加一个文件 templates/microservice/version.html

    class ServiceVersionPageView(generic.DetailView):
        template_name = 'microservice/version.html'
        model = MicroService
        pk_url_kwarg = 'service_id'
    

    以及页面视图对应的url:

      url(r'^service/(?P<service_id>[0-9]+)/versions/$', views.ServiceVersionPageView.as_view(), name='page_service_versions'),
    
    

    点击页面按钮即可弹出一个新的窗口,不过目前的页面没有内容,现在就把版本管理添加到页面。

    版本管理

    查询

    版本的查询和服务类似,就直接贴代码了:

    class ServiceVersionApi(generic.View):
        def get(self, request, service_id):
            query = request.GET
            page = query.get('page', 1)
            limit = query.get('limit', 20)
    
            try:
                service = MicroService.objects.get(pk=service_id)
            except MicroService.DoesNotExist:
                return JsonResponse({'msg': '资源不存在', status=404)
    
            versions = MicroServiceVersion.objects.filter(microservice=service)
            paginator = Paginator(versions, limit)
            pdata = paginator.page(page)
            data = [{
                'id': item.id,
                'name': item.microservice.name,
                'language': item.microservice.language,
                'description': item.description,
                'version': item.version,
                'status': item.get_status_display(),
                'created_by': item.created_by.username,
                'created': item.created,
            } for item in pdata]
    
            return JsonResponse({
              'data': data,
              'count': versions.count(),
              'code': 0,
            })
    

    相应的url:

    url(r'^microservice/(?P<service_id>[0-9]+)/versions/$', views.ServiceVersionApi.as_view(),
            name='api_microservice_versions'),
    

    创建

    由于我们是通过git来创建版本,所以版本的创建是在后台完成,我们也可以在页面触发构建任务来创建版本
    页面触发时,我们唯一要填的参数就是分支,不填则默认master

    这里有个小技巧: 先创建一个版本号为当前时间戳的版本,传递给任务作为参数,在收到回调后更新任务状态和版本号

        def post(self, request, service_id):
            ref = request.POST.get('branch', 'master').strip()
            desc = request.POST.get('description', '').strip()
            try:
                service = MicroService.objects.get(pk=service_id)
            except MicroService.DoesNotExist:
                return JsonResponse({'msg': '资源不存在'}, status=404)
    
            version = MicroServiceVersion.objects.create(
                microservice=service,
                version='building-' + str(time.time()), # 当前时间戳
                created_by=request.user,
                description=desc,
                ref=ref
            )
    
            build_params = {
                'variables[SERVICE_ID]': service.id,
                'variables[VERSION_ID]': version.id,
                'variables[SERVICE_NAME]': service.name,
                'variables[USERNAME]': request.user.username,
            }
            try:
                r = requests.post(service.build_url, data=build_params, timeout=10)
            except requests.exceptions.Timeout:
                return JsonResponse({'msg': '调用git 超时'}, status=417)
    
            if r.status_code >= 200 and r.status_code < 300:
                rdata = r.json()
                return JsonResponse(rdata, status=200)
            return JsonResponse({'msg': '创建任务失败{}'.format(r.content)})
    

    相关的页面和js代码比较多,放到 这里

  • 相关阅读:
    【Leetcode】23. Merge k Sorted Lists
    【Leetcode】109. Convert Sorted List to Binary Search Tree
    【Leetcode】142.Linked List Cycle II
    【Leetcode】143. Reorder List
    【Leetcode】147. Insertion Sort List
    【Leetcode】86. Partition List
    jenkins 配置安全邮件
    python 发送安全邮件
    phpstorm 同步远程服务器代码
    phpUnit 断言
  • 原文地址:https://www.cnblogs.com/wbjxxzx/p/12008195.html
Copyright © 2011-2022 走看看