python使用工厂方法实现请求的封装

请求基类
主要判断json格式还是form表单,收集token

class BASE_HTTP(object):
    '''
    HTTP请求父类
    '''

    def con_type(self, testdata):
        try:
            # 判断参数的格式是json还是form
            if testdata['headers']['Content-Type'] in\
                ['application/json;charset=UTF-8',
                 'application/json']:
                # 完成请求数据的装配
                try:
                    testdata['data'] = json.dumps(testdata['data'])
                except:
                    testdata['data'] = None
            # 根据请求头判断传递参数是否为form
            elif testdata['headers']['Content-Type'] in\
                ['application/x-www-form-urlencoded;charset=UTF-8',
                 'application/x-www-form-urlencoded']:
                pass
        except Exception as e:
            log.warning(f"content_type 识别失败{e}")
        return testdata

    def insert_token(self, testdata, token):
        if token is not None:
            testdata['headers']["Authorization"] = f"Bearer {token}"
        else:
            pass
        return testdata

四种请求子类:

class GET_HTTP(BASE_HTTP):
    '''
    GET请求子类
    '''

    def _get(self, testdata={}, token=None):
        data = self.insert_token(testdata=testdata, token=token)
        try:
            re = requests.get(
                url=testdata['url'],
                headers=testdata['headers'],
                params=data['data'])
        except:
            re = requests.get(
                url=testdata['url'],
                headers=testdata['headers'])
        result = re.json()
        return result


class POST_HTTP(BASE_HTTP):
    '''
    POST请求子类
    '''

    def _post(self, testdata={}, token=None):
        data = self.insert_token(testdata=testdata, token=token)
        data = self.con_type(testdata)
        re = requests.post(
            url=data['url'],
            headers=data['headers'],
            data=data['data'])
        result = re.json()
        return result


class PUT_HTTP(BASE_HTTP):
    '''
    PUT请求子类
    '''

    def _put(self, testdata={}, token=None):
        data = self.insert_token(testdata=testdata, token=token)
        data = self.con_type(testdata)
        re = requests.put(
            url=data['url'],
            headers=data['headers'],
            data=data['data'])
        result = re.json()
        return result


class DELETE_HTTP(BASE_HTTP):
    '''
    GET请求子类
    '''

    def _delete(self, testdata={}, token=None):
        data = self.insert_token(testdata=testdata, token=token)
        re = requests.delete(
            url=testdata['url'],
            headers=testdata['headers'],
            data=data['data'])
        result = re.json()
        return result

主运行方法,实现请求

class RUN_HTTP():
    def _request(self, testdata={}, token=None):
        try:
            method = testdata['method']
        except Exception as e:
            log.warning(f"请求方法缺失:{e}")
        if method in ('get', 'Get', 'GET'):
            result = GET_HTTP()._get(testdata=testdata, token=token)
        elif method in ('post', 'Post', 'POST'):
            result = POST_HTTP()._post(testdata=testdata, token=token)
        elif method in ('put', 'Put', 'PUT'):
            result = PUT_HTTP()._put(testdata=testdata, token=token)
        elif method in ('delete', 'Delete', 'DELETE'):
            result = DELETE_HTTP()._delete(testdata=testdata, token=token)
        else:
            log.info('为找到指定方法,目前支持,post,get,put,delete')
        return result

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值