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代码比较多,放到 这里

  • 相关阅读:
    mockm remote 不能正常使用的解决方案
    uviewui 的 bug 当 url 的 query 参数中有 http://127.0.0.1/ 并且省略请求前缀的时候, 就会导致请求无法发送出去
    检查 nodmeon 是否可以修改文件后重启应用
    mocha 如何延迟指定时间后再运行所有用例
    使用 babel 编译 js 为 es5 支持 ie
    git 摘取提交
    Makefile学习笔记
    使用 Service Worker 缓解网站 DDOS 攻击
    如何热更新长缓存的 HTTP 资源
    网站图片无缝兼容 WebP/AVIF
  • 原文地址:https://www.cnblogs.com/wbjxxzx/p/12008195.html
Copyright © 2011-2022 走看看