def prisocs(request, id=None):
    """PRISOC(PrivateSafeOutChains)的CURD操作REST接口"""
    if request.method == 'POST':
        mydomain = request.POST.get("mydomain")
        owner = request.POST.get("owner")
        remark = request.POST.get("remark")
        obj = PrivateSafeOutChains.objects.create(mydomain=mydomain, owner=owner, remark=remark)
        if not obj:
            result = json_result("error", "添加私有正常外链主域名失败:-(")
        else:
            result = json_result("success", "添加私有正常外链主域名成功:-)")
        return HttpResponse(result, content_type="application/json;charset=utf-8")
    elif request.method == 'DELETE':
        obj = PrivateSafeOutChains.objects.filter(id=id).delete()
        if not obj or obj[0] == 0:
            result = json_result("error", "删除私有正常外链主域名失败:-(")
        else:
            result = json_result("success", "删除私有正常外链主域名成功:-)")
        return HttpResponse(result, content_type="application/json;charset=utf-8")
    elif request.method == 'PUT':
        put = QueryDict(request.body)
        id = put.get("id")
        mydomain = put.get("mydomain")
        owner = put.get("owner")
        remark = put.get("remark")
        obj = PrivateSafeOutChains.objects.filter(id=id).update(mydomain=mydomain, owner=owner, remark=remark)
        if obj == 0:
            result = json_result("error", "更新私有正常外链主域名失败:-(")
        else:
            result = json_result("success", "更新私有正常外链主域名成功:-)")
        return HttpResponse(result, content_type="application/json;charset=utf-8")
    elif request.method == 'GET':
        if id:
            obj = PrivateSafeOutChains.objects.filter(id=id)
            if not isinstance(obj, QuerySet):
                result = json_result("error", "查询私有正常外链主域名失败:-(")
            else:
                data = list()
                data.append(to_json_dict(obj))
                result = json_result("success", "查询私有正常外链主域名成功:-)", data=data)
        else:
            rows = int(request.GET.get("rows")) if request.GET.get("rows") else 10
            page = int(request.GET.get("page")) if request.GET.get("page") else 1
            start = (page-1) * rows
            end = start + rows
            objs = PrivateSafeOutChains.objects.all()[start: end]
            if not isinstance(objs, QuerySet):
                result = json_result("error", "查询私有正常外链主域名失败:-(")
            else:
                data = list()
                for obj in objs:
                    data.append(to_json_dict(obj))
                recoards = PrivateSafeOutChains.objects.count()
                total_pages = math.floor(recoards / rows) + 1
                result = json_result("success", "查询私有正常外链主域名成功:-)", data=data, page=page,
                                     total=total_pages, records=recoards)
        return HttpResponse(result, content_type="application/json;charset=utf-8")
    else:
        return render(request, 'isadmin/error/error-404.html')
def snapshots(request, id=None):
    """网页快照(Snapshot)的CURD操作REST接口"""
    if request.method == 'POST':
        return render(request, 'isadmin/error/error-404.html')
    elif request.method == 'DELETE':
        obj = Snapshot.objects.filter(id=id).delete()
        if not obj or obj[0] == 0:
            result = json_result("error", "删除网页快照失败:-(")
        else:
            result = json_result("success", "删除网页快照成功:-)")
        return HttpResponse(result, content_type="application/json;charset=utf-8")
    elif request.method == 'PUT':
        put = QueryDict(request.body)
        id = put.get("id")
        screen_shot_path = put.get("screen_shot_path")
        obj = Snapshot.objects.filter(id=id).update(screen_shot_path=screen_shot_path)
        if obj == 0:
            result = json_result("error", "更新网页快照失败:-(")
        else:
            result = json_result("success", "更新网页快照成功:-)")
        return HttpResponse(result, content_type="application/json;charset=utf-8")
    elif request.method == 'GET':
        if id:
            obj = Snapshot.objects.filter(id=id)
            if not isinstance(obj, QuerySet):
                result = json_result("error", "查询网页快照失败:-(")
            else:
                data = list()
                if obj.get_time:
                    obj.get_time = obj.get_time.strftime("%Y-%m-%d %H:%M:%S")
                data.append(to_json_dict(obj))
                result = json_result("success", "查询网页快照成功:-)", data=data)
        else:
            rows = int(request.GET.get("rows")) if request.GET.get("rows") else 10
            page = int(request.GET.get("page")) if request.GET.get("page") else 1
            start = (page - 1) * rows
            end = start + rows
            objs = Snapshot.objects.all()[start: end]
            if not isinstance(objs, QuerySet):
                result = json_result("error", "查询网页快照失败:-(")
            else:
                data = list()
                for obj in objs:
                    if obj.get_time:
                        obj.get_time = obj.get_time.strftime("%Y-%m-%d %H:%M:%S")
                    data.append(to_json_dict(obj))
                recoards = Snapshot.objects.count()
                total_pages = math.floor(recoards / rows) + 1
                result = json_result("success", "查询网页快照成功:-)", data=data, page=page,
                                     total=total_pages, records=recoards)
        return HttpResponse(result, content_type="application/json;charset=utf-8")
    else:
        return render(request, 'isadmin/error/error-404.html')
def dcbps(request, id=None):
    """DCBP(DjangoCeleryBeatPeriodicTask)的CURD操作REST接口"""
    if request.method == 'POST':
        name = request.POST.get("name")
        args = request.POST.get("args")
        kwargs = request.POST.get("kwargs")
        queue = request.POST.get("queue")
        exchange = request.POST.get("exchange")
        routing_key = request.POST.get("routing_key")
        expires = request.POST.get("expires")
        enabled = request.POST.get("enabled")
        last_run_at = request.POST.get("last_run_at")
        total_run_count = request.POST.get("total_run_count")
        date_changed = request.POST.get("dete_changed")
        description = request.POST.get("description")
        crontab_id = request.POST.get("crontab_id")
        obj = PeriodicTask.objects.create(name=name, args=args, kwargs=kwargs, queue=queue, exchange=exchange,
                                          routing_key=routing_key, expires=expires, enabled=enabled,
                                          last_run_at=last_run_at, total_run_count=total_run_count,
                                          date_changed=date_changed, description=description, crontab_id=crontab_id)
        if not obj:
            result = json_result("error", "添加定时任务失败:-(")
        else:
            result = json_result("success", "添加定时任务成功:-)")
        return HttpResponse(result, content_type="application/json;charset=utf-8")
    elif request.method == 'DELETE':
        obj = PeriodicTask.objects.filter(id=id).delete()
        if not obj or obj[0] == 0:
            result = json_result("error", "删除定时任务失败:-(")
        else:
            result = json_result("success", "删除定时任务成功:-)")
        return HttpResponse(result, content_type="application/json;charset=utf-8")
    elif request.method == 'PUT':
        put = QueryDict(request.body)
        id = put.get("id")
        name = put.get("name")
        args = put.get("args")
        kwargs = put.get("kwargs")
        queue = put.get("queue")
        exchange = put.get("exchange")
        routing_key = put.get("routing_key")
        expires = put.get("expires")
        enabled = put.get("enabled")
        last_run_at = put.get("last_run_at")
        total_run_count = put.get("total_run_count")
        date_changed = put.get("dete_changed")
        description = put.get("description")
        crontab_id = put.get("crontab_id")
        obj = PeriodicTask.objects.filter(id=id).update(name=name, args=args, kwargs=kwargs, queue=queue, exchange=exchange,
                                                 routing_key=routing_key, expires=expires, enabled=enabled,
                                                 last_run_at=last_run_at, total_run_count=total_run_count,
                                                 date_changed=date_changed, description=description, crontab_id=crontab_id)
        if obj == 0:
            result = json_result("error", "更新定时任务失败:-(")
        else:
            result = json_result("success", "更新定时任务成功:-)")
        return HttpResponse(result, content_type="application/json;charset=utf-8")
    elif request.method == 'GET':
        if id:
            obj = PeriodicTask.objects.filter(id=id)
            if not isinstance(obj, QuerySet):
                result = json_result("error", "查询定时任务失败:-(")
            else:
                data = list()
                data.append(to_json_dict(obj))
                result = json_result("success", "查询定时任务成功:-)", data=data)
        else:
            rows = int(request.GET.get("rows")) if request.GET.get("rows") else 10
            page = int(request.GET.get("page")) if request.GET.get("page") else 1
            start = (page - 1) * rows
            end = start + rows
            objs = PeriodicTask.objects.all()[start: end]
            if not isinstance(objs, QuerySet):
                result = json_result("error", "查询定时任务失败:-(")
            else:
                data = list()
                for obj in objs:
                    data.append(to_json_dict(obj))
                recoards = PeriodicTask.objects.count()
                total_pages = math.floor(recoards / rows) + 1
                result = json_result("success", "查询定时任务成功:-)", data=data, page=page,
                                     total=total_pages, records=recoards)
        return HttpResponse(result, content_type="application/json;charset=utf-8")
    else:
        return render(request, 'isadmin/error/error-404.html')
def pocr_records(request, id=None):
    """比对结果(PrivateOutChainRecords)的CURD操作REST接口"""
    if request.method == 'POST':
        ss_id = request.POST.get("ss_id")
        out_chain = request.POST.get("out_chain")
        checked = request.POST.get("checked")
        result = request.POST.get("result")
        check_time = request.POST.get("check_time")
        obj = PrivateOutChainRecords.objects.create(ss_id=ss_id, out_chain=out_chain,
                                                    checked=checked, result=result,
                                                    check_time=check_time)
        if not obj:
            result = json_result("error", "添加比对结果记录失败:-(")
        else:
            result = json_result("success", "添加比对结果记录成功:-)")
        return HttpResponse(result, content_type="application/json;charset=utf-8")
    elif request.method == 'DELETE':
        if isinstance(id, str) and id.find(',') != -1:
            ids = id.split(',')
            result_msg = ""
            for item in ids:
                obj = PrivateOutChainRecords.objects.filter(id=item).delete()
                if not obj or obj[0] == 0:
                    result_msg += "删除比对结果记录id" + item + "失败:-("
                else:
                    result_msg += "删除比对结果记录id" + item + "成功:-)"
            result = json_result("success", result_msg)
        else:
            obj = PrivateOutChainRecords.objects.filter(id=id).delete()
            if not obj or obj[0] == 0:
                result = json_result("error", "删除比对结果记录失败:-(")
            else:
                result = json_result("success", "删除比对结果记录成功:-)")
        return HttpResponse(result, content_type="application/json;charset=utf-8")
    elif request.method == 'PUT':
        put = QueryDict(request.body)
        id = put.get("id")
        ss_id = put.get("ss_id")
        out_chain = put.get("out_chain")
        checked = put.get("checked")
        result = put.get("result")
        check_time = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time()))
        obj = PrivateOutChainRecords.objects.filter(id=id). \
            update(ss_id=ss_id, out_chain=out_chain,
                   checked=checked, result=result, check_time=check_time)
        if obj == 0:
            result = json_result("error", "更新比对结果记录失败:-(")
        else:
            result = json_result("success", "删除比对结果记录成功:-)")
        return HttpResponse(result, content_type="application/json;charset=utf-8")
    elif request.method == 'GET':
        if id:
            obj = PrivateOutChainRecords.objects.filter(id=id)
            if not isinstance(obj, QuerySet):
                result = json_result("error", "查询比对结果记录失败:-(")
            else:
                data = list()
                if obj.check_time:
                    obj.check_time = obj.check_time.strftime("%Y-%m-%d %H:%M:%S")
                data.append(to_json_dict(obj))
                result = json_result("success", "查询比对结果记录成功:-)", data=data)
        else:
            rows = int(request.GET.get("rows")) if request.GET.get("rows") else 10
            page = int(request.GET.get("page")) if request.GET.get("page") else 1
            start = (page - 1) * rows
            end = start + rows
            filters = request.GET.get("filters")
            if filters:
                objs = PrivateOutChainRecords.objects
                filters = eval(filters)
                group_op = filters["groupOp"]
                rules = filters["rules"]
                if group_op == "OR":
                    pass
                elif group_op == "AND":
                    for rule in rules:
                        if rule["op"] == "eq":
                            if rule["field"] == "checked":
                                objs = objs.filter(checked=rule["data"])
                            elif rule["field"] == "result":
                                objs = objs.filter(result=rule["data"])
                    records = objs.count()
                    objs = objs[start: end]
                else:
                    return render(request, 'isadmin/error/error-404.html')
            else:
                objs = PrivateOutChainRecords.objects.all()[start: end]
                records = PrivateOutChainRecords.objects.count()
            if not isinstance(objs, QuerySet):
                result = json_result("error", "查询比对结果记录失败:-(")
            else:
                data = list()
                for obj in objs:
                    if obj.check_time:
                        obj.check_time = obj.check_time.strftime("%Y-%m-%d %H:%M:%S")
                    data.append(to_json_dict(obj))

                total_pages = math.floor(records / rows) + 1
                result = json_result("success", "查询比对结果记录成功:-)", data=data, page=page,
                                     total=total_pages, records=records)
        return HttpResponse(result, content_type="application/json;charset=utf-8")
    else:
        return render(request, 'isadmin/error/error-404.html')