工具层handle_request

发布于:2025-03-22 ⋅ 阅读:(14) ⋅ 点赞:(0)

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)
  • 私有方法:仅供类内部调用,外部不可直接访问(以双下划线 __ 开头)
  1. 封装图片上传逻辑
  2. 动态设置请求头并发送请求
  3. 上传后重置默认请求头。
with open(file=image_dir, mode="rb") as image
  • with:Python 关键字
  • open(file=,mode=) as image:open是python内置函数
​**MultipartEncoder(fields={...})**

 

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_info

class HandleRequests:
    def __init__(self):
        self.headers = {"Content-Type": "application/json; charset=UTF-8", "locale": "zh_cn"}
        self.handle_response = HandleResponse()

    #判断接口需要token和不需要token
    def __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 url
        else:
            print("不需要替换请求地址的数据")
            return url  #函数返回值放在return关键字后面,return后面什么也不写,或return也不写默认返回none;



    # 发送请求方法封装
    def send_requests(self,method,url,data,is_upload):
        # 鉴权请求头处理,有token和无token
        self.__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_response
        else:
            # 普通接口,需要token 和不需要token
            response = requests.request(method=method,url=new_url,json=data,headers=self.headers)
            new_response = self.handle_response.handle_response(response=response)
            return new_response