点赞、收藏、加关注,下次找我不迷路
C/S 架构(Client/Server,客户端 / 服务器架构)就像是城市里的供水系统,服务器好比是大型水库,存储和处理大量数据;客户端则像是千家万户的水龙头,用户通过它获取水库(服务器)里的资源。而 Python 作为一门功能强劲且简单易学的编程语言,在 C/S 架构开发中也有着出色的表现。今天,我们就以 PySide6 作为 GUI 开发工具,Flask 作为后端框架,使用 HTTP 通信,带大家一起探索 Python GUI 开发实现 C/S 架构的完整思路。
一、C/S 架构基础入门
C/S 架构由客户端和服务器两部分组成,它们分工明确,相互协作。客户端负责与用户进行交互,接收用户输入,并展示服务器返回的结果;服务器则负责处理客户端发送的请求,对数据进行存储、计算等操作,再将处理结果返回给客户端。
举个生活中的例子,我们去银行办理业务,银行柜台工作人员就相当于客户端,负责接收我们的业务办理需求;而银行后台的庞大系统和数据库就是服务器,它会根据我们的需求进行账户查询、转账等操作,最后把结果反馈给柜台工作人员,再由工作人员告知我们。
在 C/S 架构中,客户端和服务器之间需要通过网络进行通信。常见的通信协议有 HTTP、TCP 等,今天我们使用的是 HTTP 协议,它就像快递员使用的物流单号系统,能准确地把客户端的 “包裹”(请求)送到服务器,并将服务器处理后的 “包裹”(响应)送回客户端。

二、认识 PySide6 和 Flask
(一)PySide6:打造精美客户端界面
PySide6 是 Python 的一个 GUI 框架,它能协助我们快速创建出美观、易用的客户端界面。就好比建筑师手中的设计图纸,通过 PySide6,我们可以设计出按钮、文本框、列表等各种界面元素。
安装 PySide6 也很简单,打开命令行,输入以下命令即可:
pip install PySide6
安装完成后,我们可以用一个简单的代码示例来创建一个空白窗口:
import sys
from PySide6.QtWidgets import QApplication, QWidget
app = QApplication(sys.argv)
window = QWidget()
window.show()
sys.exit(app.exec())
这段代码第一创建了一个应用程序对象app,然后实例化了一个窗口对象window,最后通过show()方法显示窗口,并使用app.exec()运行应用程序,sys.exit()确保程序正常退出。
(二)Flask:搭建高效后端服务
Flask 是一个轻量级的 Python Web 框架,它能快速搭建起后端服务器。就像搭建一个小型工厂,Flask 可以接收客户端的请求,对数据进行加工处理,再把产品(响应)送出去。
安装 Flask 同样在命令行中操作:
pip install flask
下面是一个简单的 Flask 示例,创建一个返回 “Hello, World!” 的路由:
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello_world():
return 'Hello, World!'
if __name__ == '__main__':
app.run()
在这段代码中,我们创建了一个 Flask 应用对象app,使用@app.route('/')装饰器定义了一个根路由,当客户端访问服务器的根路径时,就会执行hello_world函数,返回 “Hello, World!”。app.run()则启动了 Flask 服务器。

三、Python GUI 开发实现 C/S 架构的具体步骤
(一)规划功能与接口
在开始编码之前,我们需要先规划好客户端和服务器的功能,以及它们之间交互的接口。假设我们要开发一个简单的学生成绩查询系统,客户端负责展示查询界面,接收用户输入的学生姓名,向服务器发送查询请求,并展示查询结果;服务器则负责接收查询请求,从数据库(这里为了简化,使用模拟数据)中查询学生成绩,将结果返回给客户端。
我们可以设计如下接口:
|
接口名称 |
请求方法 |
请求地址 |
请求参数 |
响应数据 |
|
查询学生成绩 |
GET |
/query_score |
name(学生姓名) |
{“name”: “张三”, “score”: 90} |
(二)搭建 Flask 后端服务
- 第一,创建一个 Flask 项目文件夹,在文件夹中新建一个app.py文件。
- 导入所需的库:
from flask import Flask, request, jsonify
这里Flask是框架核心类,request用于获取客户端发送的请求数据,jsonify用于将数据转换为 JSON 格式并作为响应返回。
3. 创建 Flask 应用并定义路由:
app = Flask(__name__)
# 模拟学生成绩数据
students = [
{"name": "张三", "score": 90},
{"name": "李四", "score": 85},
{"name": "王五", "score": 95}
]
@app.route('/query_score', methods=['GET'])
def query_score():
name = request.args.get('name')
for student in students:
if student['name'] == name:
return jsonify(student)
return jsonify({"error": "学生未找到"}), 404
在这段代码中,我们定义了一个/query_score路由,处理 GET 请求。通过request.args.get('name')获取客户端传递的学生姓名,然后在模拟数据中查找对应的学生成绩,如果找到则返回成绩数据,否则返回错误信息和 404 状态码。
4. 启动 Flask 服务器:
if __name__ == '__main__':
app.run(debug=True)
(三)构建 PySide6 客户端界面
- 在项目文件夹中新建一个client.py文件。
- 导入必要的库:
import sys
from PySide6.QtWidgets import QApplication, QWidget, QVBoxLayout, QLabel, QLineEdit, QPushButton, QMessageBox
import requests
这里除了 PySide6 的相关库,还导入了requests库,用于发送 HTTP 请求。
3. 创建客户端界面类:
class ScoreQueryClient(QWidget):
def __init__(self):
super().__init__()
self.init_ui()
def init_ui(self):
layout = QVBoxLayout()
self.label = QLabel("请输入学生姓名:")
layout.addWidget(self.label)
self.input_name = QLineEdit()
layout.addWidget(self.input_name)
self.button = QPushButton("查询成绩")
self.button.clicked.connect(self.query_score)
layout.addWidget(self.button)
self.setLayout(layout)
self.setWindowTitle("学生成绩查询")
self.show()
在这个类中,我们通过init_ui方法创建了一个包含标签、文本框和按钮的界面,并将按钮的点击事件连接到query_score方法。
4. 实现查询成绩的方法:
def query_score(self):
name = self.input_name.text()
if not name:
QMessageBox.warning(self, "警告", "请输入学生姓名")
return
try:
response = requests.get(f'http://127.0.0.1:5000/query_score?name={name}')
response.raise_for_status()
data = response.json()
if "error" in data:
QMessageBox.warning(self, "提示", data["error"])
else:
message = f"{data['name']}的成绩是:{data['score']}"
QMessageBox.information(self, "查询结果", message)
except requests.exceptions.RequestException as e:
QMessageBox.critical(self, "错误", f"请求出错:{str(e)}")
在query_score方法中,我们先获取用户输入的姓名,然后使用requests.get方法向服务器发送 GET 请求。如果请求成功,根据响应数据判断是否查询到学生成绩,并弹出相应的提示框;如果请求出错,则显示错误信息。

(四)运行与测试
- 先运行app.py启动 Flask 服务器,在命令行中进入项目文件夹,输入python app.py,当看到类似 * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)的提示时,说明服务器已成功启动。
- 再运行client.py启动客户端程序,同样在命令行中输入python client.py,此时会弹出客户端界面。在文本框中输入学生姓名,点击 “查询成绩” 按钮,就能看到从服务器返回的查询结果。
通过以上步骤,我们成功使用 PySide6 和 Flask,基于 HTTP 通信实现了一个简单的 C/S 架构学生成绩查询系统。在实际开发中,我们还可以对这个系统进行许多拓展。
列如,在服务器端,我们可以将模拟数据替换为真实的数据库操作,使用 SQLite、MySQL 等数据库存储和管理学生成绩数据;在客户端,我们可以优化界面设计,增加更多的功能,如批量查询、成绩统计等。
同时,我们还可以思考安全性问题,对客户端和服务器之间的通信进行加密,防止数据被窃取或篡改;也可以对服务器进行性能优化,提高处理大量请求的能力。
上述内容详细讲解了 Python GUI 开发实现 C/S 架构的全流程。你若觉得某些部分需要更深入展开,或有其他修改方向,欢迎随时告知我。















暂无评论内容