根据不同路径返回不同页面--返回动态页面
根据不同的路径返回不同页面
上面的一篇博客总结了根据不同的路径返回相应的文件,同理,我们可以根据不同的路径返回不同的独立的页面。
之前用到的index.html文件我们不考虑外部文件引入的情况,另外再新建一个home.html文件,同样不考虑外部文件引入的情况。
具体实现的代码如下:
# -*- coding:utf-8 -*-
import socket
def index():
with open('index.html','rb') as f:
data = f.read()
return data
def home():
with open('home.html','rb')as f:
data = f.read()
return data
if __name__ == '__main__':
opt_lst = [
('/index',index),
('/home',home)
]
server = socket.socket()
server.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1)
server.bind(('127.0.0.1',8765))
server.listen()
while 1:
conn,addr = server.accept()
msg = conn.recv(65105).decode('utf-8')
#path是从请求体中经过处理得到的
path = msg.split('\r\n\r\n')[0].split()[1]
print(path)
#记得发送响应协议!
conn.sendall(b'HTTP/1.1 200 OK \r\n\r\n')
for i in opt_lst:
if i[0] == path:
func = i[1]
content = func()
#一定要记的break!不执行else里的语句
break
else:
content = b'404 Not Found'
conn.sendall(content)
conn.close()
这样,我们在浏览器中输入127.0.0.1:8765/index与127.0.0.1:8765/home就可以看到对应的不同网页了。当然~需要其他的静态文件的话再另外做判断就OK了!
返回动态页面的web框架的实现
前面我们返回的都是静态网页,实际中的网页都是 动态的————其实所谓的动态网页是里面有可变的数据!
这里我们用字符串的替换方式来实现这个动态的需求————利用时间戳来模拟动态的数据。
代码如下:
# -*- coding:utf-8 -*-
import time
import socket
def index():
with open('index.html','r',encoding='utf-8')as f:
data = f.read()
str_now = str(time.time())
# 替换源文件中的内容
data = data.replace('123',str_now)
# 注意返回bytes类型的数据
return bytes(data,encoding='utf-8')
def home():
with open('home.html','r',encoding='utf-8')as f:
data = f.read()
str_now = str(time.time())
# 替换源文件中的内容
data = data.replace('456',str_now)
#注意返回bytes类型的数据
return bytes(data,encoding='utf-8')
if __name__ == '__main__':
opt_lst = [
('/index',index),
('/home',home),
]
server = socket.socket()
server.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1)
server.bind(('127.0.0.1',8765))
server.listen()
while 1:
conn,addr = server.accept()
msg = conn.recv(65105).decode('utf-8')
# print(msg)
# 记得先给浏览器发送响应协议
conn.sendall(b'HTTP/1.1 200 OK \r\n\r\n')
# 通过请求体的数据筛选出path
path = msg.split('\r\n\r\n')[0].split()[1]
print(path)
# for...else
for i in opt_lst:
if i[0] == path:
content = i[1]()
# 一定要记得break,不让else中的内容执行!
break
else:
content = b'404 Not Found'
conn.sendall(content)
conn.close()
然后我们在浏览器中输入127.0.0.1:8765/index与127.0.0.1:8765/home并不断刷新页面就可以看到动态的效果了!