栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

简道云api增删改查的类—python书写

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

简道云api增删改查的类—python书写

# -*- coding:utf-8 -*-
import requests
import json
import datetime,time
import math
from jdy_util.sql_util import MySQLUtil,Mysql_jdy_utils

class APIUtils:
    WEBSITE = "https://api.jiandaoyun.com"
    RETRY_IF_LIMITED = True

    # 构造函数
    def __init__(self, appId, entryId, api_key):
        self.url_get_widgets = APIUtils.WEBSITE + '/api/v1/app/' + appId + '/entry/' + entryId + '/widgets'
        self.url_get_data = APIUtils.WEBSITE + '/api/v1/app/' + appId + '/entry/' + entryId + '/data'
        self.url_retrieve_data = APIUtils.WEBSITE + '/api/v1/app/' + appId + '/entry/' + entryId + '/data_retrieve'
        self.url_update_data = APIUtils.WEBSITE + '/api/v2/app/' + appId + '/entry/' + entryId + '/data_update'
        self.url_create_data = APIUtils.WEBSITE + '/api/v2/app/' + appId + '/entry/' + entryId + '/data_create'
        self.url_delete_data = APIUtils.WEBSITE + '/api/v1/app/' + appId + '/entry/' + entryId + '/data_delete'
        self.api_key = api_key

    # 带有认证信息的请求头
    def get_req_header(self):
        return {
            'Authorization': 'Bearer ' + self.api_key,
            'Content-Type': 'application/json;charset=utf-8'
        }

    # 发送http请求
    def send_request(self, method, request_url, data):
        headers = self.get_req_header()
        if method == 'GET':
            res = requests.get(request_url, params = data, headers = headers, verify = False)
        if method == 'POST':
            res = requests.post(request_url, data = json.dumps(data), headers = headers, verify = False)
        result = res.json()
        if res.status_code >= 400:
            if result['code'] == 8303 and APIUtils.RETRY_IF_LIMITED:
                # 5s后重试
                time.sleep(5)
                return self.send_request(method, request_url, data)
            else:
                raise Exception('请求错误!', result)
        else:
            return result

    # 获取表单字段
    def get_form_widgets(self):
        result = self.send_request('POST', self.url_get_widgets, {})
        return result['widgets']

    # 根据条件获取表单中的数据
    def get_form_data(self, dataId, limit, fields, data_filter):
        result = self.send_request('POST', self.url_get_data, {
            'data_id': dataId,
            'limit': limit,
            'fields': fields,
            'filter': data_filter
        })
        print("这是get_form_data根据查询参数查到的简道云表单的数据:",result)
        return result['data']

    # 获取表单中满足条件的所有数据
    def get_all_data(self, fields, data_filter):
        form_data = []

        # 递归取下一页数据
        def get_next_page(dataId):
            data = self.get_form_data(dataId, 100, fields, data_filter)
            if data:
                for v in data:
                    form_data.append(v)
                dataId = data[len(data) - 1]['_id']
                get_next_page(dataId)

        get_next_page('')
        return form_data

    # 检索一条数据
    def retrieve_data(self, dataId):
        result = self.send_request('POST', self.url_retrieve_data, {
            'data_id': dataId
        })
        return result['data']

    # 创建一条数据
    def create_data(self, data):
        result = self.send_request('POST', self.url_create_data, {
            'data': data,
            "is_start_trigger": True
        })
        return result['data']

    # 更新数据
    def update_data(self, dataId, data):
        result = self.send_request('POST', self.url_update_data, {
            'data_id': dataId,
            'data': data,
            "is_start_trigger": True
        })
        return result['data']

    # 删除数据
    def delete_data(self, dataId):
        result = self.send_request('POST', self.url_delete_data, {
            'data_id': dataId,
            "is_start_trigger": True
        })
        return result

    # 根据关键字段获取数据
    def get_dataId(self, data_filter):  # 根据字段的值查询dataid
        form_dataId = []
        result = self.get_form_data(None,100,None,data_filter)
        if result:
            for v in result:
                temp_dataId = v['_id']
                # print('v中的dataId:', temp_dataId)
                form_dataId.append(temp_dataId)
                # print('添加后的form_dataId:', form_dataId)

        print("这是根据查询参数查到的简道云表单的dataID:", form_dataId)

        return form_dataId

    # 根据关键字段获取数据,这段代码是调试原来搜索错误的时候,想运用这一个进行纠错的,先放这儿,不删除
    def get_dataId_from_dataid_and_filter(self, data_id, data_filter):  # 根据字段的值查询dataid
        form_dataId = []
        print("这是get_dataId_from_dataid_and_filter根据查询参数查到的简道云表单的data_filter:",data_filter)
        result = self.get_form_data(data_id,100,None,data_filter)
        print("这是get_dataId_from_dataid_and_filter根据查询参数查到的简道云表单的result:",result)
        if result:
            for v in result:
                temp_dataId = v['_id']
                # print('v中的dataId:', temp_dataId)
                form_dataId.append(temp_dataId)
                # print('添加后的form_dataId:', form_dataId)

        print("这是get_dataId_from_dataid_and_filter根据查询参数查到的简道云表单的dataID:", len(form_dataId))

        return form_dataId

    def get_form_data_from_dataId(self, dataId, limit):
        result = self.send_request('POST', self.url_get_data, {
            'data_id': dataId,
            'limit': limit
        })
        return result['data']

    '''根据data_filter的值查找所有的dataid'''
    def get_all_dataId(self, data_filter):
        form_dataId = self.get_dataId(data_filter)
        print("这里是get_all_dataId第一步所取的长度:",len(form_dataId))
        if len(form_dataId) == 100:
            print("执行了dataid长度等于100的代码")
            temp_dataId = form_dataId[len(form_dataId) - 1]
            print("get_form_data:",temp_dataId)

            # 递归取下一页数据
            def get_next_page(temp_dataId,data_filter):
                data = self.get_dataId_from_dataid_and_filter(temp_dataId, data_filter)
                print('get_next_page查询的data:', data)
                if len(data)==100:
                    for v in data:
                        temp_dataId = v
                        # print('v中的dataId:', temp_dataId)
                        form_dataId.append(temp_dataId)
                        # print('添加后的form_dataId:', form_dataId)
                    get_next_page(temp_dataId,data_filter)
                elif data:
                    for v in data:
                        temp_dataId = v
                        # print('v中的dataId:', temp_dataId)
                        form_dataId.append(temp_dataId)
                        # print('添加后的form_dataId:', form_dataId)
                    return form_dataId
            form_dataId = get_next_page(temp_dataId,data_filter)
        print("这是根据查询参数查到的简道云表单的所有dataID的长度:", len(form_dataId))
        return form_dataId

    '''修改,先根据filter的值进行查找,再一一修改'''
    def update_from_filter(self, data, data_filter):
        # 判断查找的结果是否为空,如果不为空,则修改
        form_dataId = self.get_all_dataId(data_filter)
        if form_dataId:
            num_update = 0
            for dataId in form_dataId:
                print(dataId)
                self.update_data(dataId, data)
                num_update += 1
            print("修改的数据数:",num_update)
            return num_update
        # 返回修改的条数

    '''修改或新增,先根据data_filter的值进行查找,有则修改,无则新增'''
    def update_or_create(self, data, data_filter):
        # 判断查找的结果是否为空,如果不为空,则修改
        form_dataId = self.get_all_dataId(data_filter)
        if form_dataId:
            num_update = 0
            for dataId in form_dataId:
                print(dataId)
                self.update_data(dataId, data)
                num_update += 1
            print("修改的数据数:",num_update)
            return num_update
        # 返回修改的条数

        else:
            # self.create_data(data)
            result = self.create_data(data)
            print('新增数据:',result)

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/423739.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号