首页 > 解决方案 > 重用 url 请求方法

问题描述

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

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"

标签: pythonpython-requestsreusability

解决方案


使用辅助函数来执行这些函数共有的事情。并用于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"]

推荐阅读