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)
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)
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)
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())
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)
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)
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)
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)
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)