基于socket实现的web小框架

import socket
import time
import pymysql
"""
不同的URL,返回不同的内容
返回的内容要是写好的html文件
html里面的内容要有变化
数据要从数据库中查找
"""
sk = socket.socket()
sk.bind(("127.0.0.1", 8090))
sk.listen(5)


def login():
    with open('login.html', encoding="utf-8") as f:
        data = f.read()

    time_s = str(time.time())
    data_new = data.replace("@@", time_s)
    return data_new

def index():
    with open("index.html", encoding="utf-8") as f:
        data = f.read()
    conn = pymysql.connect(host="127.0.0.1", port=3306, user="root", password="", db="Friday", charset="utf8")
    cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)
    cursor.execute("select id, name,gender from user")
    user_list = cursor.fetchall()
    cursor.close()
    conn.close()
    """
    <tr>
        <td>id</td>
        <td>name</td>
        <td>gender</td>
       
    </tr>
    """
    ret = ""
    for i in user_list:
        ret +=  """
            <tr>
                <td>{0}</td>
                <td>{1}</td>
                <td>{2}</td>
            </tr>
        """.format(i["id"], i["name"],i['gender'])
    data_new = data.replace("@@", ret)
    return data_new


def info():
    return '这是一个页面'

url_func_map = [
    ("/info/",info),
    ("/login/", login),
    ("/index/",index),
]

if __name__ == '__main__':

    while True:
        conn, addr = sk.accept()  # 夯住等待链接
        data = conn.recv(8096)
        data_str = str(data, encoding="utf-8")
        # 取请求头
        header = data_str.split("\r\n\r\n")[0]
        tmp = header.split("\r\n")[0]
        # 取url
        url = tmp.split(" ")[1]
        conn.send(b"HTTP/1.1 200 OK\r\nContent-Type: text/html; charset=utf-8\r\n\r\n")  # 响应头
        func_name = None
        for i in url_func_map:
            if i[0] == url:
                func_name = i[1]
                break
        if func_name:
            response = func_name()

        else:
            response = "404"
        conn.send(bytes(response, encoding="utf-8"))
        conn.close()

 

posted @ 2018-05-11 23:39  星雨5213  阅读(94)  评论(0)    收藏  举报