瓜瓜
瓜瓜
发布于 2023-04-06 / 12 阅读
0
0

Pyqt5: 小工具开发实战

开发背景

由于在测试工作中,我们需要创建很多M365 的数据用于测试,但是手动创建批量数据很不人性化。但是之前开发人员开发的工具也不是很满足我们的需求。于是我想自己动手写一个符合测试人员做数据的小工具。

1. 工具目标

目标是创建一个用户友好的桌面应用,并且我希望可以支持mac、windows等多种系统;还需要简单易用。核心功能:支持M365 数据的批量创建。

2. 技术选型

  • PyQt5:作为 Python 的 GUI 框架,跨平台效果好,完美支持mac、windows等,学习成本低,功能强大。

  • Microsoft Graph API:用于与 M365 交互,处理邮件发送等操作。

  • MSAL(Microsoft Authentication Library):实现 OAuth 2.0 认证,获取 M365 的访问令牌。

  • Python 模块:使用 requests 处理 HTTP 请求。

功能设计

目前工具主要实现了以下功能:

1. 登录认证

  • 功能:用户输入 Azure 应用注册的 Client ID 和 Tenant ID,点击“登录 M365”按钮后,工具通过浏览器打开 Microsoft 登录页面,完成 OAuth 2.0 授权码流认证,获取访问令牌(token)。

  • 设计:使用本地 HTTP 服务器(http.server)捕获重定向 URL 中的授权码,无需用户手动输入,简化操作。

# 启动本地 HTTP 服务器监听重定向
        server = HTTPServer(("localhost", 8080), OAuthHandler)
        server.auth_code = None
        server_thread = threading.Thread(target=server.serve_forever)
        server_thread.daemon = True
        server_thread.start()

        # 打开浏览器进行登录
        info("正在打开浏览器,请登录 Microsoft 账户...")
        webbrowser.open(auth_url)

        # 等待授权码
        while server.auth_code is None:
            pass

        # 获取授权码
        auth_code = server.auth_code
        info(f"获取到授权码: {auth_code[:10]}...")

        # 关闭服务器
        server.shutdown()

        # 使用授权码换取 token
        result = self.app.acquire_token_by_authorization_code(
            auth_code,
            scopes=self.scopes,
            redirect_uri=self.redirect_uri,
        )

2. 邮件批量发送

  • 功能

    • 支持手动输入收件人(用逗号分隔多个邮箱)或从 CSV/Excel 文件读取收件人列表。

    • 用户可以指定发件人邮箱、邮件主题、正文和发送数量(默认 1,可批量重复发送)。

    • 提供进度条和日志区域,实时显示发送状态和进度。

  • 设计:使用 QThread 实现异步邮件发送,避免界面卡顿;通过 Microsoft Graph API 调用 sendMail 端点发送邮件,支持 token 自动刷新。

3. 界面交互

  • 功能

    • 提供选项卡式界面,包括“邮件工具”、“SharePoint工具”和“PowerBi工具”页(目前仅邮件功能实现)。

    • 二选一的收件人输入方式:手动输入或文件选择,防止冲突。

  • 设计:使用 PyQt5 的 QTabWidget、QLineEdit、QTextEdit、QPushButton 等控件,结合 QVBoxLayout 和 QHBoxLayout 布局管理器,确保界面清晰美观。

未来改进

目前只实现了M365 邮件的批量发送功,我计划在未来进行以下优化:

  • 附件支持:实现邮件附件的批量上传和发送功能。

  • SharePoint 集成:实现在SP site 中批量创建list/library的功能。

  • Power BI 集成:实现批量创建powerBI下report的功能。

  • 用户体验优化:界面美化以及更详细的帮助文档。


评论