def __init__(self)
分析项 内容/描述 ** __init__(self)
**类的初始化方法,用于设置实例的默认请求头( self.headers
)和响应处理对象(self.handle_response
)。** self.headers
**固定 HTTP 请求头:
{"Content-Type": "application/json; charset=UTF-8", "locale": "zh_cn"}
作用:
1. 声明数据为 JSON 格式,编码为 UTF-8
2. 设置接口语言为简体中文(zh_cn
)。** self.handle_response
**实例化 HandleResponse
对象,用于处理 HTTP 响应(如解析响应数据、校验状态码、提取动态参数等)。
def __hanele_headers(self)
分析项 所用模块/函数 解决的问题 ** __hanele_headers(self)
**hasattr
+getattr
+format
动态处理请求头:
根据HandleAttr
类是否包含access_token
属性,决定是否添加Authorization
鉴权头。** hasattr
**Python 内置函数 安全检查 HandleAttr
类中是否存在access_token
属性,避免因属性不存在导致程序崩溃。** getattr
**Python 内置函数 获取 HandleAttr
类中的access_token
属性值,用于生成鉴权 Token。** format
**字符串方法 将 Token 值格式化为 Authorization: bearer {token}
的标准鉴权头格式。
def __upload_image(self,method,url)
代码片段 描述 __upload_image(self, method, url)
- 私有方法:仅供类内部调用,外部不可直接访问(以双下划线
__
开头)
- 封装图片上传逻辑
- 动态设置请求头并发送请求
- 上传后重置默认请求头。
with open(file=image_dir, mode="rb") as image
with:
Python 关键字open(file=,mode=) as image:open是python内置函数
** MultipartEncoder(fields={...})
**
python">import re #re模块处理正则表达式 import requests from requests_toolbelt.multipart import MultipartEncoder #使用 requests_toolbelt 发multipart/form-data请求from tools.handle_attribute import HandleAttr from tools.handle_reponse import HandleResponse from tools.handle_path import image_dir from conf.setting import image_infoclass HandleRequests:def __init__(self):self.headers = {"Content-Type": "application/json; charset=UTF-8", "locale": "zh_cn"}self.handle_response = HandleResponse()#判断接口需要token和不需要tokendef __hanele_headers(self):if hasattr(HandleAttr,"access_token"):token = getattr(HandleAttr,"access_token")self.headers["Authorization"]="bearer{}".format(token) #字符串格式化else:print("该接口不需要鉴权")# 图片上传请求处理(管理端后台上传图片)def __upload_image(self,method,url):#with语法自动关闭文件流,不需要file.close();file=image_dir文件绝对路径或相对路径;mode="rb"文件操作模式,r只读,b二进制方式;open函数负责打开文件;with open(file=image_dir,mode="rb") as image:from_data = MultipartEncoder(fields={# "file":("图片的名称.jpg","图片的二进制流","image/jpeg")"file": (image_info["file_name"], image, image_info["file_type"])})self.headers["Content-Type"]=from_data.content_type#记得缩进response = requests.request(method=method,url=url,data=from_data,headers=self.headers)self.headers["Content-Type"] ="application/json; charset=UTF-8"return response#请求接口地址替换数据def __replace_url(self,url:str):#在字符串中找到正则表达式所匹配的所有子串,并返回一个列表;url是待匹配的子串;key_list = re.findall("#(\w.+?)#",url)if len(key_list)>0:for key in key_list:url = url.replace(f"#{key}#",str(getattr(HandleAttr,key)))print("替换后的请求地址:",url)return urlelse:print("不需要替换请求地址的数据")return url #函数返回值放在return关键字后面,return后面什么也不写,或return也不写默认返回none;# 发送请求方法封装def send_requests(self,method,url,data,is_upload):# 鉴权请求头处理,有token和无tokenself.__hanele_headers()# 请求地址参数替换new_url = self.__replace_url(url=url)if str(is_upload) == "1":# 图片上传接口# 写图片上传的代码逻辑response = self.__upload_image(method=method,url=new_url)new_response = self.handle_response.handle_response(response=response)print("图片上传接口返回:",new_response)return new_responseelse:# 普通接口,需要token 和不需要tokenresponse = requests.request(method=method,url=new_url,json=data,headers=self.headers)new_response = self.handle_response.handle_response(response=response)return new_response