python----web开发
2021/8/19 9:06:17
本文主要是介绍python----web开发,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
-
1. Web应用职责介绍
-
接收web服务器的动态资源请求,给web服务器提供处理动态资源请求的服务。
-
2. 动态资源判断
-
根据请求资源路径进行判断
web服务器程序(web.py)代码:
import socket import threading import sys import framework # 获取用户请求资源的路径 # 根据请求资源的路径,读取指定文件的数据 # 组装指定文件数据的响应报文,发送给浏览器 # 判断请求的文件在服务端不存在,组装404状态的响应报文,发送给浏览器 class HttpWebServer: def __init__(self): # 1.编写一个TCP服务端程序 # 创建socekt self.tcp_server_socekt = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 设置端口复用 self.tcp_server_socekt.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, True) # 绑定地址 self.tcp_server_socekt.bind(("", 8000)) # 设置监听 self.tcp_server_socekt.listen(128) def handle_client_request(self, client_socekt): # 获取浏览器的请求信息 client_request_data = client_socekt.recv(1024).decode() # 获取用户请求信息 request_data = client_request_data.split("\r\n") # 获取请求行数据 request_line = request_data.pop(0) # 使用pop将请求行数据从列表中取出 request_line_data = request_line.split(' ') # 获取请求头部数据 request_header = {} for data in request_data: if data == '': continue request_header[data.split(": ")[0]]=data.split(": ")[1] # 判断客户端是否关闭 if len(request_line_data) == 1: client_socekt.close() return # 请求行中获取请求资源的路径 request_path = request_line_data[1] # 判断是否有查询字符串数据 request_query = request_path.split('?') if len(request_query) > 1: request_path = request_query[0] query_str = request_query[1] else: query_str = None # 构造请求数据 requests = { 'path':request_path, 'query_str':query_str, 'header':request_header } """动态资源""" # 符合wsgi协议的参数 env = { "request_path":request_path, "requests":requests } # 应答行 response_line = "HTTP/1.1 200 OK\r\n" # 应答头 response_header = "Server:pwb\r\nAccess-Control-Allow-Credentials:true\r\nAccess-Control-Allow-Origin:*\r\nAccess-Control-Allow-Methods:GET, POST, PUT\n\rAccess-Control-Allow-Headers:X-Custom-Header" # 应答体 response_body =framework.handle_request(env) # 应答数据 response_data = response_line + response_header + "\r\n\r\n" + response_body # 发送数据给到浏览器 client_socekt.send(response_data.encode()) # 关闭和浏览器通讯的socket client_socekt.close() def start(self): while True: # 2.获取浏览器发送的HTTP请求报文数据 # 建立链接 client_socekt, client_addr = self.tcp_server_socekt.accept() # 创建子线程 sub_thread = threading.Thread(target=self.handle_client_request, args=(client_socekt,)) sub_thread.start() if __name__ == '__main__': # 创建服务器对象 my_web_server = HttpWebServer() # 启动服务器 my_web_server.start()
-
3. 处理客户端的动态资源请求
-
创建web应用程序
-
接收web服务器的动态资源请求
-
处理web服务器的动态资源请求并把处理结果返回给web服务器
-
web服务器把处理结果组装成响应报文发送给浏览器
web应用程序(framework.py)代码:
"""miniweb,负责处理动态资源请求""" import re from pymysql import * import json # ajax请求的数据,获取首页数据 def index(env): # 创建链接 conn = connect(host='localhost', port=3306, database='booksite', user='root', password='mysql', charset='utf8') # 创建游标 cursor = conn.cursor() # 执行sql语句 sql = "select * from bookinfo;" cursor.execute(sql) # 获取数据 元组 ((),()) stock_data = cursor.fetchall() # 把元组转化成列表 center_data_list =[] for data in stock_data: center_data_list.append({ "id":data[0], "name":data[1], "auth":data[2], "img_url":data[3], "rank":data[4] }) # 把列表转化成json字符串 # ensure_ascii = False 控制台中可以显示中文 json_str = json.dumps(center_data_list, ensure_ascii=False) # 关闭连接 cursor.close() conn.close() return json_str # 处理动态资源请求 def handle_request(env): # 获取动态请求资源路径 request_path = env["request_path"] print("接收到的动态资源请求:", request_path) if request_path == "/index": # 获取首页数据 result = index(env) return result else: # 没有找到动态资源 return "404 not found..."
-
4. 小结
-
动态资源的判断通过请求资源路径来完成
-
处理客户端的动态资源请求
-
接收web服务器的动态资源请求
-
Web应用程序处理动态资源请求并把处理结果返回给web服务器
-
web服务器把处理结果组装成响应报文发送给浏览器
-
这篇关于python----web开发的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-12-24Python编程入门指南
- 2024-12-24Python编程基础入门
- 2024-12-24Python编程基础:变量与数据类型
- 2024-12-23使用python部署一个usdt合约,部署自己的usdt稳定币
- 2024-12-20Python编程入门指南
- 2024-12-20Python编程基础与进阶
- 2024-12-19Python基础编程教程
- 2024-12-19python 文件的后缀名是什么 怎么运行一个python文件?-icode9专业技术文章分享
- 2024-12-19使用python 把docx转为pdf文件有哪些方法?-icode9专业技术文章分享
- 2024-12-19python怎么更换换pip的源镜像?-icode9专业技术文章分享