传token给食物类,通过新写一个test.py去调用登录类和食物类
#\libs\request_test.py
from libs.login_my import Login from libs.food_my import Food # 调用登录获得token l=Login() t=l.login(is_need_token=True) # 将登录获得的token 传递给食物模块 f=Food() f.token=t # 传token给整个食物类,这样整个食物类可以直接使用token;因为基类已经将token作为属性,所以食物类可以直接传token resp_query=f.query() resp_add=f.add() resp_update=f.update() print(resp_query) print(resp_add) print(resp_update)
# libs中 login.py继承基类中的发送方法 from common.baseAPI_my import BaseAPI class Login(BaseAPI): # 登录方法 def login(self,is_need_token=False): # 发送请求 获得请求结果 resp = BaseAPI.send_request(self) # 是否需要添加请求头 if is_need_token: return resp['data']['token'] else: return resp # 登出 def logout(self): pass if __name__ == '__main__': l=Login() res=l.login(is_need_token=False) print(res)
# libs 文件中 food.py继承基类中的发送方法 from common.baseAPI_my import BaseAPI from libs.login_my import Login class Food(BaseAPI): # 查询食物方法 def query(self): # 发送请求 获得请求结果 resp = self.send_request(self) return resp # 新增食物 def add(self): # 发送请求 获得请求结果 resp = self.send_request(self) return resp # 修改食物 def update(self): # 发送请求 获得请求结果 resp = self.send_request(self) return resp if __name__ == '__main__': f=Food() res= f.query() print(res)
#common 中baseAPI.py import inspect import requests from configs.config import HOST from utils.handle_md5 import get_md5 from utils.handle_yaml import get_yaml class BaseAPI(): # 属性存请求体 url method def __init__(self,token=''): # 如果有token 需要放类的属性中 类中方法都可以使用 yaml_path = '../configs/evn.yaml' # yaml的路径 yaml_data = get_yaml(yaml_path) # 获得整个yaml中的数据 self.data = yaml_data[self.__class__.__name__] # 获得以继承基类的类的名称为键的 yaml中的值 # 默认数token为空,如果商店,食品类需要token,实例化商店,传入token参数,发请求 self.token = token # 方法 def send_request(self,data='',**kwargs): api_data=self.data[inspect.stack()[1][3]] api_url=f'{HOST}{api_data["url"]}' if inspect.stack()[1][3]=='login': api_data['payload']['password']=get_md5(api_data['payload']['password']) resp=requests.request(method=api_data['method'], url=api_url, data=api_data['payload'], headers={"Authorization": self.token}, **kwargs ) return resp.json()