#\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()