Ejemplo n.º 1
0
    def get(request):
        # 从前端获取当前的页码数,默认为1
        currentPage = str2int(request.GET.get('page', 1))
        countList = str2int(request.GET.get('limit', 10))

        player_dict = {}
        search_params = json.loads(request.GET.get('searchParams', "{}"))

        for index in search_params:
            if len(search_params[index]) > 0:
                player_dict[index] = search_params[index]

        if len(player_dict) == 0:
            user_list = Players.objects.all().order_by('create_date')
        else:
            user_list = Players.objects.filter(**player_dict).order_by('create_date')

        paginator_user = user_list[(currentPage - 1) * countList:currentPage * countList]

        new_list = list()

        for i, v in enumerate(paginator_user):
            score = Resolver.objects.filter(username=v.username).aggregate(nums=Sum('score'))

            new_dict = {'id': i + 1 + ((currentPage - 1) * countList), 'username': v.username,
                        'create': v.create_date.strftime('%Y-%m-%d %H:%M:%S'),
                        'address': v.address, "score": score.get("nums"), "uid": v.id}
            new_list.append(new_dict)

        user = {'code': 0, 'msg': '', 'count': len(user_list), 'data': new_list}

        return JsonResponse(user)
Ejemplo n.º 2
0
    def get(request):
        # 从前端获取当前的页码数,默认为1

        countList = str2int(request.GET.get('limit', 15))
        currentPage = str2int(request.GET.get('page', 1))

        person_list = []
        user = Players.objects.all()

        for i in user:
            person_list.append(i.username)

        info = Resolver.objects.filter(username__in=person_list).values('username').annotate(
            Sum('score')).annotate(Count('username')).order_by("-score__sum")

        paginator_container = info[(currentPage - 1) * countList:currentPage * countList]

        new_list = []

        for i, v in enumerate(paginator_container):
            new_dict = {'id': i + 1 + ((currentPage - 1) * countList),
                        'username': v.get("username", ""),
                        'score': v.get("score__sum", ""),
                        'nums': v.get("username__count", ""),
                        'address': Players.objects.get(username=v.get("username", "")).address
                        }

            new_list.append(new_dict)

        user = {'code': 0, 'msg': '', 'count': len(info), 'data': new_list}

        return JsonResponse(user)
Ejemplo n.º 3
0
    def get(request):
        # 从前端获取当前的页码数,默认为1

        countList = str2int(request.GET.get('limit', 15))
        currentPage = str2int(request.GET.get('page', 1))

        resolver_list = Resolver.objects.all().order_by('create_date')
        paginator_container = resolver_list[(currentPage - 1) * countList:currentPage * countList]

        new_list = []

        for i, v in enumerate(paginator_container):
            new_dict = {'id': i + 1 + ((currentPage - 1) * countList),
                        'create': v.create_date.strftime('%Y-%m-%d %H:%M:%S'),
                        'username': v.username,
                        'image_tag': v.image_tag,
                        'topic_name': v.topic_name,
                        'score': v.score,
                        'uid': v.id}

            new_list.append(new_dict)

        user = {'code': 0, 'msg': '', 'count': len(resolver_list), 'data': new_list}

        return JsonResponse(user)
Ejemplo n.º 4
0
    def get(self, request, username):
        user_list = []
        score_list = {}
        sort_dict = {}

        user = Players.objects.all()

        for i in user:
            user_list.append(i.username)

        result = Resolver.objects.filter(answer=True).filter(
            username__in=user_list).values('username').annotate(
                Sum('score')).annotate(
                    Count('username')).order_by("-score__sum")

        for i, line in enumerate(result):
            sort_dict[line["username"]] = i + 1
            score_list[line["username"]] = line["score__sum"]

        try:
            key1 = sort_dict[username]
            score = score_list[username]
        except KeyError:
            key1 = 0
            score = 0
            answer_list = []
            score_list = []
            return render(request, self.template_name, locals())

        answer_list = Resolver.objects.filter(answer=True).filter(
            username=username).all().order_by("create_date")

        # 从前端获取当前的页码数,默认为1
        page = request.GET.get('page', 1)

        # 把当前的页码数转换成整数类型
        currentPage = str2int(page) if str2int(page) == 0 else 1

        # 生成paginator对象,定义每页显示15条记录
        paginator = Paginator(answer_list, 15)

        try:
            score_list = paginator.page(page)  # 获取当前页码的记录
        except PageNotAnInteger:
            score_list = paginator.page(1)  # 如果用户输入的页码不是整数时,显示第1页的内容
        except EmptyPage:
            score_list = paginator.page(
                paginator.num_pages)  # 如果用户输入的页数不在系统的页码列表中时,显示最后一页的内容

        return render(request, self.template_name, locals())
Ejemplo n.º 5
0
    def post(request):
        id_str = request.POST.get("id", "")
        name = request.POST.get("topic_name", "")
        desc = request.POST.get("topic_desc", "")
        ports = request.POST.get("ports", "")
        display = request.POST.get("display", "1")
        score = request.POST.get("score", "")
        flag = request.POST.get("flag", "")
        category = request.POST.get("category", "")
        method = request.POST.get("score_method", "1")

        if display == "1":
            topic_display = True
        else:
            topic_display = False

        if method == "1":
            _score = True
        else:
            _score = False

        topic = TopicName.objects.filter(id=id_str)
        if topic.count() == 0:
            data = {"status": 403, "msg": "数据不存在"}
            return JsonResponse(data, safe=False)

        _topic = TopicName.objects.get(id=id_str)
        if len(name) > 0:
            _topic.topic_name = name

        if len(desc) > 0:
            _topic.topic_description = desc

        if len(ports) > 0:
            _topic.inside_port = ports

        _topic.display = topic_display

        if len(score) > 0:
            _topic.score = str2int(score)

        if len(flag) > 0:
            _topic.flag_string = flag

        _topic.score_type = _score

        _topic.category = Category.objects.get(id=category) if Category.objects.get(
            id=category) else Category.objects.get(category_name="WEB")

        _topic.save()

        data = {"status": 200, "msg": "修改完成"}
        return JsonResponse(data, safe=False)
Ejemplo n.º 6
0
    def get(request):
        # 从前端获取当前的页码数,默认为1
        currentPage = str2int(request.GET.get('page', 1))
        countList = str2int(request.GET.get('limit', 15))

        user_list = Users.objects.all().order_by('create_date')
        paginator_user = user_list[(currentPage - 1) * countList:currentPage * countList]

        new_list = list()

        for i, v in enumerate(paginator_user):
            new_dict = {'id': i + 1 + ((currentPage - 1) * countList), 'username': v.username, 'sex': v.sex,
                        'super': v.is_superuser,
                        'create': v.create_date.strftime('%Y-%m-%d %H:%M:%S'),
                        'experience': 255,
                        'last_ip': v.last_ip, 'last_time': v.last_time, 'classify': '作家', 'score': 57, "uid": v.id}
            new_list.append(new_dict)

        user = {'code': 0, 'msg': '', 'count': len(user_list), 'data': new_list}

        return JsonResponse(user)
Ejemplo n.º 7
0
    def get(request):
        # 从前端获取当前的页码数,默认为1
        countList = str2int(request.GET.get('limit', 15))
        currentPage = str2int(request.GET.get('page', 1))

        search_dict = {}
        search_params = json.loads(request.GET.get('searchParams', "{}"))

        for index in search_params:
            if len(search_params[index]) > 0:
                search_dict[index] = search_params[index]

        if len(search_dict) == 0:
            dockers_list = TopicName.objects.all().order_by('create_date')
        else:
            dockers_list = TopicName.objects.filter(**search_dict).order_by('create_date')

        paginator_docker = dockers_list[(currentPage - 1) * countList:currentPage * countList]

        new_list = list()

        for i, v in enumerate(paginator_docker):
            new_dict = {'id': i + 1 + ((currentPage - 1) * countList), 'username': v.user.username,
                        'create': v.create_date.strftime('%Y-%m-%d %H:%M:%S'),
                        'topic_name': v.topic_name,
                        'image_tag': v.image_tag,
                        'pull_status': v.pull_status,
                        'flag_string': v.flag_string,
                        'inside_port': v.inside_port,
                        'score': v.score,
                        'display': v.display,
                        'type': v.score_type,
                        'category': v.category.category_name,
                        'uid': v.id}

            new_list.append(new_dict)

        user = {'code': 0, 'msg': '', 'count': len(dockers_list), 'data': new_list}

        return JsonResponse(user)
Ejemplo n.º 8
0
    def get(request):
        # 从前端获取当前的页码数,默认为1
        currentPage = str2int(request.GET.get('page', 1))
        countList = str2int(request.GET.get('limit', 15))

        category_list = Category.objects.all().order_by('create_date')
        paginator_category = category_list[(currentPage - 1) * countList:currentPage * countList]

        new_list = list()

        for i, v in enumerate(paginator_category):
            count = Category.objects.get(id=v.id).category.count()
            new_dict = {'id': i + 1 + ((currentPage - 1) * countList),
                        'create': v.create_date.strftime('%Y-%m-%d %H:%M:%S'),
                        'category': v.category_name,
                        'nums': count,
                        'category_id': v.id}

            new_list.append(new_dict)

        user = {'code': 0, 'msg': '', 'count': len(category_list), 'data': new_list}

        return JsonResponse(user)
Ejemplo n.º 9
0
    def post(request):
        action = request.POST.get("action")
        images_id = request.POST.get("images_id")

        try:
            topic = TopicName.objects.get(id=images_id)
        except ObjectDoesNotExist:
            data = {"status": 403, "msg": "找不到数据"}
            return JsonResponse(data, safe=False)

        search_dict = {}

        if action == "start":

            if "," in topic.inside_port:
                port_list = []
                port_pattern = re.compile("([0-9]+)")
                ports = port_pattern.findall(topic.inside_port)
                for i in ports:
                    port = str(str2int(i)) if str2int(i) != 0 else "80"
                    port_list.append(port)

                port_list = port_list
            else:
                port = str(str2int(topic.inside_port)) if str2int(
                    topic.inside_port) != 0 else "80"
                port_list = [port]

            port_dict = {}

            out_list = []

            for i in port_list:
                port_get = PORT_QUEUE.get()
                port_dict[i] = port_get
                out_list.append(str(port_get))

            outside = ",".join(out_list)

            info = TopicName.objects.filter(image_tag=topic.image_tag).first()

            if info is None:
                data = {"status": 403, "msg": "无此镜像"}
                return JsonResponse(data, safe=False)

            user = str(request.user.username) if str(request.user.username) \
                else request.session.get("user_name", "")

            search_dict['username'] = user
            search_dict['status'] = "Running"

            # 状态检查
            result = Containers.objects.filter(**search_dict).count()

            if result > 0:
                run_list = []
                result = Containers.objects.filter(**search_dict).all()

                for i in result:
                    run_list.append(i.topic_name)

                result1 = ",".join(run_list)

                data = {
                    "status": 403,
                    "msg": "题目:{}已启动,请先关闭再启动此镜像".format(result1)
                }
                return JsonResponse(data, safe=False)

            try:

                if topic.flag_type == "status":
                    # 如果flag是静态
                    con = DOCKER_CLIENT.containers.run(image=topic.image_tag,
                                                       ports=port_dict,
                                                       detach=True)

                    Containers.objects.create(id=get_uuid(),
                                              username=user,
                                              contain=con.id,
                                              inside_port=topic.inside_port,
                                              outside_port=outside,
                                              topic_name=topic.topic_name,
                                              image_tag=topic.image_tag,
                                              status="Running")
                else:
                    # 如果flag是动态
                    con = DOCKER_CLIENT.containers.run(image=topic.image_tag,
                                                       ports=port_dict,
                                                       detach=True)
                    flag = generate_flag(user)
                    contain_id = con.id

                    # 运行容器中根目录下的start.sh文件修改或生成flag
                    docker_container = DOCKER_CLIENT.containers.get(contain_id)
                    command = "/bin/bash /start.sh '{}'".format(flag)
                    docker_container.exec_run(cmd=command, detach=True)

                    Containers.objects.create(id=get_uuid(),
                                              username=user,
                                              contain=contain_id,
                                              inside_port=topic.inside_port,
                                              outside_port=outside,
                                              topic_name=topic.topic_name,
                                              image_tag=topic.image_tag,
                                              status="Running",
                                              flag_string=flag)

                data = {"status": 200, "msg": str(port_dict)}

                return JsonResponse(data, safe=False)

            except Exception as e:

                data = {"status": 403, "msg": f"镜像启动失败,请稍后再试,{str(e)}"}

                return JsonResponse(data, safe=False)

        elif action == "destroy":

            search_dict = dict()

            search_dict['username'] = request.session.get(
                "user_name", "") if request.session.get(
                    "user_name", "") else request.user.username
            search_dict['status'] = "Running"

            obj = TopicName.objects.filter(id=images_id).first().image_tag
            search_dict["image_tag"] = obj

            search_result = Containers.objects.filter(**search_dict).all()
            if len(search_result) > 0:
                two_result = Containers.objects.filter(**search_dict).first()
                two_result.status = "Stop"
                two_result.save()

                if "," in two_result.outside_port:
                    outside = two_result.outside_port.split(",")
                else:
                    outside = [two_result.outside_port]

                for i in outside:
                    PORT_QUEUE.put_nowait(int(i))

                #  启用子线程关闭容器
                obj = ImageStop(two_result.contain)
                obj.start()

                data = {"status": 200, "msg": "容器已销毁"}
                return JsonResponse(data, safe=False)

            else:
                data = {"status": 403, "msg": "无启动容器"}
                return JsonResponse(data, safe=False)