如何用Python将HTTP接口封装成可视化页面。




前言
     在软件开发的广阔天地里,我们时常会遇到这样的情况:某些关键功能只能通过接口触发,而缺乏直观的用户界面。对于用户而言,用户需要手动编写JSON数据或利用命令行工具来调用接口,这无疑是一道难以逾越的技术门槛。
     为了解决这一痛点,我们决定利用PyQt5这一强大的Python GUI库,打造一个便捷的小工具。这个小工具能够将原本晦涩难懂的接口入参,封装成一个直观、易用的可视化表单。用户只需在表单中填写必要的信息,点击提交,工具便会自动将这些数据整理成接口所需的格式,并发送请求。如此,用户便无需再为接口调用而烦恼,大大提升了工作效率和用户体验。
     在接下来的教程中,我们将详细介绍如何使用PyQt5设计并实现这一功能强大的小工具。从界面的设计到数据的传递,再到接口的调用,每一步都会进行详尽的讲解。希望这份教程能够帮助你轻松解决接口操作不便的问题,让软件开发变得更加高效和便捷。

 

1.先看最终的效果,用户打开桌面应用后,只会出现下面的弹窗,接口代码等,无感

 

将后端接口,封装成前端界面。

 

 

 

2.接下来就是详细步骤:


步骤 1: 安装必要的库
首先,确保你的Python环境已经安装。然后,你需要安装PyQt5。你可以通过pip安装它:

pip install PyQt5
PS:PyQt5是一个用于创建图形用户界面(GUI)的Python库。我们需要PyQt5来创建可视化页面。

步骤 2: 编写代码
接下来,我们将编写Python代码来创建一个窗口,该窗口包含一个表单提交页面,用户点击“”确定“按钮时,将输入的姓名和电话,传给添加地址接口的body使用。

#本代码是通过PyQt5库实现前后端交互,在本地电脑打开一个提交表单的窗口,然后把表单数据传参给接口
from PyQt5.QtWidgets import QApplication, QWidget, QVBoxLayout, QLineEdit, QPushButton, QLabel, QMessageBox
import sys
import requests
import jsonpath


class TestApi:
    Token1 = ""
    addname = ""
    addPnonenumber = ""

    #1登录接口
    def test_login1_api(self):
        url = "https://www.xxxxxxxx.com/web/api/user/login/v2"
        headers = {"Content-Type":"application/x-www-form-urlencoded"}
        datas = {"username":"admin","password":"12345678","verify":"","openId":"","unionId":"","rebind":"0"}
        res = requests.post(url,headers=headers,data=datas)
        result = res.json()
        print("登录接口响应报文",res.text)
        assert '登录成功' in res.text
        value = jsonpath.jsonpath(result,"$.data.token")
        TestApi.Token1 = value[0]

    #2添加地址接口
    def test_addAddress_api(self):

        if not self.addname or not self.addPnonenumber:
            print("错误:姓名或电话号码未设置。")
            return
        url = "https://www.xxxxxxxx.com/web/api/member/editAddress"
        headers = {"Content-Type":"application/x-www-form-urlencoded","Authorization": TestApi.Token1}
        datas = {"id":"0","name":self.addname,"phone":self.addPnonenumber,"address":"广东省湛江市雷州市乌石镇","cityId":"440882","cityName":"广东省湛江市雷州市","streetName":"乌石镇","latitude":"20.556195","longitude":"109.856828","isDefault":"false"}
        print("Sending data:", datas)
        res = requests.post(url,headers=headers,data=datas)
        print("添加地址接口响应报文",res.text)
        assert '成功' in res.text


    def run_all_apis(self, main_window):
        success = True
        try:
            self.test_login1_api()
            self.test_addAddress_api()
        except AssertionError as e:
            success = False
            print(e)
        if success:
            main_window.show_message("所有接口调用成功!")
        else:
            main_window.show_message("有异常,请检查代码")


class MainWindow(QWidget):
    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):
        self.setWindowTitle('地址信息输入')
        self.setGeometry(100, 100, 300, 150)
        layout = QVBoxLayout()
        self.nameLabel = QLabel('姓名:', self)
        self.nameInput = QLineEdit(self)
        layout.addWidget(self.nameLabel)
        layout.addWidget(self.nameInput)
        self.phoneLabel = QLabel('电话:', self)
        self.phoneInput = QLineEdit(self)
        layout.addWidget(self.phoneLabel)
        layout.addWidget(self.phoneInput)
        self.submitButton = QPushButton('确定', self)
        self.submitButton.clicked.connect(self.submit_info)
        layout.addWidget(self.submitButton)
        self.setLayout(layout)
        self.api_tester = TestApi()


    def submit_info(self):
        self.api_tester.addname = self.nameInput.text().strip()  # 使用strip()去除可能的空白字符

        self.api_tester.addPnonenumber = self.phoneInput.text().strip()

        if not self.api_tester.addname or not self.api_tester.addPnonenumber:
            QMessageBox.warning(self, "输入错误", "请填写完整的姓名和电话号码!")
            return
        self.api_tester.run_all_apis(self)

    def show_message(self, message):
        QMessageBox.information(self, "结果", message)  # 使用self作为窗口对象


if __name__ == '__main__':
    app = QApplication(sys.argv)
    ex = MainWindow()
    ex.show()
    sys.exit(app.exec_())

 

 



步骤 3: 运行程序
保存你的Python文件(例如countdown.py),然后在CMD命令行中运行它:或者直接在pycharm脚本调试运行,也是可以的。

cd C:\Program Files\python3.12\pythonProject
python countdown.py


       你应该会看到一个简单的窗口,上面显示着姓名和电话的输入框,以及一个确定按钮。此时,其实已经实现了接口可视化功能。但是唯一缺点是,目前还需要依赖Python环境,所以如有需要,接下来我们将开始,把以上代码,打包成一个可执行的应用程序,即.exe文件,直接运行即可,不再依赖环境。

 

       要使PyQt5应用程序在任何电脑上运行而无需安装Python环境,可以使用一些工具来将Python代码、必要的库以及一个Python解释器一起打包成一个可执行文件(.exe)。
以下是方法:

步骤 1:

PyInstaller 是一个很好的选择,因为它支持多种平台(Windows、Linux、MacOS)并且相对容易使用。你需要确认 PyInstaller 是否已经安装在你的系统上,并且需要添加pyinstaller安装目录的环境变量。你可以通过 Python 的包管理工具 pip 来检查,

pip show pyinstaller
# 或者,如果你使用的是 Python 3,可能需要使用
pip3 show pyinstaller

如果这个命令返回了 PyInstaller 的信息,那么它已经被安装了。如果没有返回任何信息,那么可以通过 pip 来安装它:

pip install pyinstaller
# 或者,对于 Python 3
pip3 install pyinstaller

 



步骤 2:打包您的应用程序
在包含您的Python脚本(例如SpringFestivalCountdown.py)的目录中,打开cmd命令行或终端,并运行以下命令来打包您的应用程序:

pyinstaller --onefile --windowed SpringFestivalCountdown.py

--onefile 选项指示PyInstaller将所有内容打包到一个单独的可执行文件中。
--windowed 或 --noconsole 选项对于GUI应用程序很有用,因为它会隐藏命令行窗口(如果您的应用程序是基于控制台的,则不需要此选项)。

#方案二:如以上方法不行,注意,可能需要管理员权限运行。先管理员打开cmd,然后cd到py文件路径,使用命令pyinstaller -F name.py


#方案三,由于部分电脑的python、pip、pyinstaller等安装环境的问题,导致pyinstaller命令不能被识别,或者如果你不想修改 PATH 环境变量,只是想快速测试 PyInstaller 是否可用,你可以使用 Python 的完整路径来调用 pip 安装的脚本。例如,在 Windows 上,你可以这样将PyInstaller文件和脚本文件路径写死:

"C:\Users\zz\AppData\Roaming\Python\Python312\Scripts\pyinstaller.exe" --onefile --windowed "C:\Program Files\python3.12\pythonProject\XX_name.py"

 

步骤 3:查找可执行文件
        打包完成后,您会在dist目录下找到名为SpringFestivalCountdown.exe(在Windows上)的可执行文件。您可以将其复制到任何Windows电脑上运行,而无需安装Python。具体文件位置,在cmd输出时,可以显示出来。
   一般情况下保存程序的路径都是这样的:C:\Program Files\python3.12\pythonProject\dist,在这个文件夹去运行程序就可以了。

 

 

本文只是给具体的思路起个头,还有很多不完善的,希望各位大佬可以一起参与建设。

 

 

异常记录

1、如果打包的exe文件,出现闪退,可以在三种打包方案中,切换,尝试解决,多数问题是由于依赖没有打包齐全,

2、如果打开程序,如下提示,某某模块不存在。就需要重新打包:

Traceback (most recent call last):
File "pyqt5_01.py", line 4, in <module>
Module Not Found Error: No module named 'requests'
  • 需检查 代码中导的包,是否确实已经安装在用于打包的 Python 环境中。可以通过在命令行运行 pip show requests 来检查。如果没有,则需要pip install 下载,所有依赖最好都检查一下。安装完成再重新打包,

 3、如果,确认包和环境没问题,但还是反馈某一模块不存在,就需要指定引入一下包。如下引入jsonpath :

"C:\Users\zz\AppData\Roaming\Python\Python312\Scripts\pyinstaller.exe" --onefile --windowed --hidden-import=jsonpath "C:\Program Files\python3.12\pythonProject\pyqt5_01.py"

 

4、若是想尝试修改exe图片,那么请使用一下命令

#先检查有没有安装Pillow库,这个库是用来做图像处理的。
pip show Pillow
#如果没有返回Pillow版本信息,就需要下载一下。
pip install Pillow

#确保下载安装好以后,再执行下面的命令,注意这里我们通过--icon参数,指定了一个.ico的图片文件。


"C:\Users\zz\AppData\Roaming\Python\Python312\Scripts\pyinstaller.exe" --onefile --windowed --icon="C:\Program Files\python3.12\pythonProject\clock.ico" "C:\Program Files\python3.12\pythonProject\timeout.py"

如果不安装Pillow库,可能会出现,打开程序时,报无法定位序数380于动态链接库。。。。

 

 

 

 



结语

亲爱的朋友:
      希望本文中描述的问题以及解决方案,可以帮助到您。当然,我们深知,问题和挑战总是层出不穷,新的情况也在不断涌现。如果读者朋友您有更好的方案,或者在实际应用中发现了文中的不足之处,请不吝分享您的宝贵建议。诚挚地邀请每一位读者加入我们的行列,共同完善这份教程。
    感谢您的阅读与支持!

Dear frends,

     We hope that the questions and solutions presented in this article can be of assistance to you. Of course, we are fully aware that problems and challenges are always emerging in an endless stream, and new situations are constantly arising. If you, our readers, have better solutions or have discovered any deficiencies in this article through practical application, please do not hesitate to share your valuable suggestions with us. We sincerely invite every reader to join us in continuously improving this tutorial.

Thank you for your reading and support!
See you,Parting is for better meeting!


 

posted @ 2024-09-19 15:16  xiaodi888  阅读(38)  评论(0编辑  收藏  举报