重用url请求方法

问题描述 投票:1回答:2

我有一个类提供了很多类似的方法:

class Helper:
    BASE_URL = "xxx:xxx"
    @staticmethod
    def get_A():
        url = BASE_URL + "/a?"
        resp = requests.get(url)
        ret_json = json.loads(resp.content)
        return [r["id"] for r in ret_json["people"]]

    @staticmethod
    def get_B():
        url = BASE_URL + "/b/list"
        resp = requests.get(url)
        ret_json = json.loads(resp.content)
        return {r["name"]: r["gender"] for r in ret_json["people"]}


    @staticmethod
    def post_C():
        url = BASE_URL + "/admin/c"
        resp = requests.post(url)
        ret_json = json.loads(resp.content)
        return ret_json["date"]

    ......

    @staticmethod
    def get_Z():
        .......

如何在这些方法中重复使用url = BASE_URL + diff_url; resp = requests.get(url); ret_json = json.loads(resp.content)部分并让它们返回ret_json的不同部分或者只是将它们保留为原样?


要清楚

我如何将这些方法组合成这样的方法:

def get_something(*arg, **kwargs):
    url = BASE_URL + ...
    resp = requests.get/post(url)
    ret_json = json.loads(resp.content)
    return "different part of ret_json"
python python-requests reusability
2个回答
2
投票

使用辅助函数来执行这些函数的共同操作。并使用requests.request允许通过不同的HTTP方法请求。

class Helper:
    BASE_URL = "xxx:xxx"

    @staticmethod
    def request(method, path):
        url = BASE_URL + path
        resp = requests.request(method, url)
        return json.loads(resp.content)

    @staticmethod
    def get_A():
        ret_json = Helper.request('GET', "/a?")
        return [r["id"] for r in ret_json["people"]]

    @staticmethod
    def get_B():
        ret_json = Helper.request('GET', "/b/list")
        return {r["name"]: r["gender"] for r in ret_json["people"]}


    @staticmethod
    def post_C():
        ret_json = Helper.request('POST', "/admin/c")
        return ret_json["date"]

1
投票

您想在包含公共部分的类上创建方法。就像是:

class Helper:
    BASE_URL = "xxx:xxx"

    @staticmethod
    def _base_get(suffix):
        url = BASE_URL + suffix
        resp = requests.get(url)
        return json.loads(resp.content)

    @staticmethod
    def get_A():
        ret_json = Helper._base_get('/a?')
        return [r["id"] for r in ret_json["people"]]
© www.soinside.com 2019 - 2024. All rights reserved.