XX学Python·mini web开发案例
mini_web开发案例
参考阶段三day07
- 面对对象动态服务器
import socket import threading import json class WebServer(): def __init__(self): # 一、创建服务端对象 self.server = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 二、绑定ip和端口 self.server.bind(('192.168.88.8', 8001)) # 三、监听 self.server.listen(5) # def url_data(self): # 处理不同请求路径 def clinet_request(self, clinet_data): # 五、接受客户端(浏览器)数据 recv_data = clinet_data.recv(1024) # 捕获数据处理异常,捕获到异常就结束函数的业务逻辑执行 try: # 读取请求报文中的请求路径,根据不同的请求路径返回不同的页面 # 5-1、将bytes类型转为字符串 str_data = recv_data.decode() # 5-2、字符串切割 按\r\n切割 得到请求行、请求头数据、请求体数据 GET /register HTTP/1.1\r\nHost: 127.0.0.1:8009\r\nConnection: keep-alive\r\n data_list = str_data.split('\r\n') # 5-3、从切割后的列表中提取请求行数据,再按照空格切割请求行数 GET /register HTTP/1.1 request_line = data_list[0] # 5-4、从切割后的请求行列表数据中提取请求路径 url_path = request_line.split(' ')[1] except Exception as e: # 输出异常信息 print(e) clinet_data.send(b'not data') return None # 5-5、据不同请求路径查询不同数据表内容返回给浏览器(有很多elif,最好再单独封装方法如def url_data,再调用self.url_data()) if url_path == '/user': # 不同路径处理方法也可再单独封装 # 查询user用户数据库表 data_dict = {'name': 'python', 'age': 18, 'gender': 'boy'} # 返回查询到user数据表内容 # 借助json模块,将字典转为字符串,才可以在请求体中进行字符串拼接 send_data = json.dumps(data_dict) elif url_path == '/goods': # 查询goods商品数据库表 goods_dict = {'name': 'xiaomi', 'price': 5000, 'stock': 100} # 返回查询到goods数据表内容 # 借助json模块,将字典转为字符串,才可以在请求体中进行字符串拼接 send_data = json.dumps(goods_dict) else: send_data = 'error' # 构建响应报文数据 # 响应行 response_line = 'HTTP/1.1 200 ok\r\n' # 响应头 response_header = 'Server:itcast\r\n\r\n' # 响应体 response_body = send_data respose_data = response_line + response_header + response_body # 六、返回数据给客服端 clinet_data.send(respose_data.encode()) def start(self): # 四、循环等待客户端连接,获取客服端的保存数据连接对象和客户端地址 print('服务器启动。。。') while True: clinet_data, addr = self.server.accept() print('请求的客户端:', clinet_data) # 创建线程执行客户端处理方法client_request 五、六 t = threading.Thread(target=self.clinet_request, args=(clinet_data,)) # 启动线程 t.start() web = WebServer() web.start()
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 上周热点回顾(3.3-3.9)
· AI 智能体引爆开源社区「GitHub 热点速览」