一、业务接口封装之-portal登录接口
在api目录中按照实际的业务,新建portal和manage目录,在portal目录中新增一个portalLogin目录,会后在portalLogin目录中新建一个portalLoginApi.py,编写封装portal端登录的接口。
portal登录接口详细的封装代码和解析如下:
from common.requestsClient import RequestsClient
# 登录接口集成封装的requests接口类
class PortalLoginApi(RequestsClient):
def __init__(self):
# 调用父类的初始化数据函数
super().__init__()
# 定义登录接口需要传的参数
self.url = 'http://localhost:8888/community/flogin'
self.json = {
"userName": "admin",
"password": "123456"
}
self.method = 'post'
if __name__ == '__main__':
resp = PortalLoginApi().sendRequest()
print(resp.json())
二、业务接口封装之-解决token传参问题
主要的思路是,编写一个portal端的BaseportalApi类,该类继承RequestsClient,定义一个portalToken的变量,然后把portalToken放到请求头的token中,其他需要传token的接口就只需要继承BaseportalApi类,BasePortalApi接口的TOKEN哪里来呢?这就需要我们先调用一次登录接口的API的时候,把登录接口的API的token赋值给BaseportalApi的portalToken,这时候BaseportalApi的portalToken就带有了登录API的token,发起HTTP请求,其请求头就会有token值。
1、先在api目录中新建一个,baseApi.py。
from common.requestsClient import RequestsClient
class BaseportalApi(RequestsClient):
# 初始定义是个空值,那么在整个框架层面,必须先完成该属性的赋值
portalToken = ""
def __init__(self):
super().__init__()
self.host = 'http://localhost:8888/community'
self.headers = {
'token': self.portalToken
}
2、portal登录API的修改
PortalLoginApi改为继承BasePortalApi,这样就可以使用BasePortalApi.host,提高代码的高内聚,低耦合
from api.base_api import BasePortalApi
# 登录接口集成封装的requests接口类
class PortalLoginApi(BasePortalApi):
portalToken = ''
def __init__(self):
# 调用父类的初始化数据函数
super().__init__()
# 定义登录接口需要传的参数1
self.url = f'{self.host}/flogin'
self.json = {
"userName": "admin",
"password": "123456"
}
self.method = 'post'
if __name__ == '__main__':
resp = PortalLoginApi().sendRequest()
print(resp.json())
三、业务接口封装之-发布贴子接口
在portal新建一个portalArticle目录,然后新建一个createArticleApi.py文件,封装帖子相关的接口。
主要的思路是发帖的接口BasePortalApi类,PortalLoginApi登录之后,将portal登录的api提取出来给BasePortalApi的portalToken变量,这样SendArticleApi的请求头就有BasePortalApi的token了 。
from api.base_api import BasePortalApi
from api.portal.portalLogin.portalLoginApi import PortalLoginApi
# 发贴接口继承BaseportalApi的类,便于解决token的传参
class SendArticleApi(BasePortalApi):
def __init__(self, title, author, content, createUser):
# 调用父类的初始化数据函数
super().__init__()
# 定义发贴接口需要传的参数1
self.url = f'{self.host}/article/createArticle'
self.json = {
"title": title,
"BoardId": None,
"commentStatus": 0,
"slideshow": 0,
"top": 0,
"author": author,
"content": content,
"createUser": createUser,
"attachmentList": [],
"selectTagList": [
1
],
"boardId": 1
}
self.method = 'post'
if __name__ == '__main__':
# 登录portalAPI
resp = PortalLoginApi().sendRequest()
print(resp.json()['data']['token'])
# 将portal登录的api提取出来给BasePortalApi的portalToken变量
BasePortalApi.portalToken = resp.json()['data']['token']
resp1 = SendArticleApi('标题', '超级管理员', '内容', '1').sendRequest()
print(resp1.json())
print(resp1.headers)
其他接口的封装方式同理,请大家自己根据自己的业务进行封装;