Python—mini_web框架代码实现

Web- mini_server.py

# 导入模块
import socket,re,multiprocessing
import mini_frame     # WSGI网关接口
class WSGIServer():
	def __init__(self,port):
		# 创建套接字
		self.tcp_socket = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
		# 设置套接字选项,允许端口复用
		self.tcp_socket.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADRR,1)
		# 绑定服务器本地信息
		self.tcp_socket.bind(('',port))
	def re_client(self):
		'''完成对客户端浏览器的服务'''
		# 接收客户端的数据
		recv_data = new_socket.recv(1024).decode('utf-8')
		# 按行切割,将数据生成一个列表
		request_lines = recv_data.splitlines()
		# 判断列表是否有内容
		if not request_lines:
			print('您的列表为空,请重新检查')
			return
		else:
			request = request_lines[0]
			ret = re.match(r"[^/]+(/[^ ]*)",request)
			if not ret:
				print('您的正则表达式未匹配成功,请重新检查')
				return
			else:
				file_name = ret.group(1)
				if file_name =='/':
					file_name = './index.html'
		# 如果访问不是以.py结尾的 则暂定访问静态资源
		if not file_name.endswith('.py'):
			try:
				f = open('./static'+file_name,'rb')
			except:
				# 响应报文
				response_body = '--------NOT  FOUND PAGE-----------'
				# 响应头
				response_header = 'HTTP/1.1 404 NOT FOUND \r\n'
				response_header += 'Content-length:%d \r\n' % len(response_body.encode('utf-8')
				response_header += '\r\n'
				response = response_header.encode('utf-8')+response_body.encode('utf-8')
				# 发送给web浏览器数据
				new_socket.send(response)
			else:
				response_body = f.read()
				f.close()
				response_header = 'HTTP/1.1 200 OK \r\n'
				response_header += 'Content-Type:text/html;charset=utf-8 \r\n' 
				response_header += 'Content-length%d \r\n' % len(response_body)
				response_header += '\r\n'
				response = response_header.encode('utf-8')+response_body
				new_socket.send(response)
		else:
			env = dict()
			env['PATH_INTO'] = file_name
			response_bady = mini_frame.application(env,server_frame)
			response_header = 'HTTP/1.1 %s \r\n' % self.status
			for temp in self.header:
				response_header +='%s:%s\r\n' % (temp[0],temp[1])
			response_header += '\r\n'
			response = response_header.encode('utf-8')+response_bodt.encode('utf-8')
			new_socket.send(response)
		# 关闭套接字
		new_socket.close()
	def server_frame(self,status,header):
		'''对应WSGI网关接口'''
		self.status =status
		self.header = [('Server','mini_web v8.1')]
		self.header += header

	def run_server(self):
		'''启动web-浏览器整体控制'''
		# 循环web浏览器服务
		while True:
			# 等待这个新客户端的连接
			new_socket,new_addr = self.tcp_socket.accept()
			# 创建进程,并为这个客户端服务
			p = multiprocessing.Process(target=self.re_client,args=(new_socket,))
			# 启动进程
			p.start()
		# 关闭套接字
		new_socket.close()
def main():
	'''完成web服务器的整体控制'''
	wsgi_server = WSGIServer(port)
	wsgi_server.run_server()

if __name__ == '__main__':
	main()

Web - mini_frame.py

import time,re

def index():
	with open('./templates/index.html') as f:
		coutent = f.read()
	my_sock_info = '这是主页内容'
	coutent = re.sub(r'\{%content%\}' , my_sock_info)
	return coutent
def center():
	with open('./templates/center.html') as f:
		coutent = f.read()
	my_sock_info = '这是个人中心来自mysql数据库的数据'
	coutent = re.sub(r'\{%content%\}',my_sock_info)
	return cuntent

def application(env,server_frame):
	status = '200 OK'
	header= [('Content-Type','text/html;charset=utf-8')]
	server_frame(status,header)
	file_name = env['PATH_INTO’]
	if file_name == '/index.py':
		return index()
	elif file_name == 'center.py':
		return center()
	else:
		print('-----NOT FOUND PAGE------')
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值