根据不同路径返回不同页面--返回动态页面

根据不同路径返回不同页面--返回动态页面

根据不同的路径返回不同页面

上面的一篇博客总结了根据不同的路径返回相应的文件,同理,我们可以根据不同的路径返回不同的独立的页面。
之前用到的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并不断刷新页面就可以看到动态的效果了!
posted on 2019-05-15 19:58  江湖乄夜雨  阅读(382)  评论(0)    收藏  举报