2020-06-11 Day2 上次web服务器的优化(根据不同的访问路径执行不同的函数)

web框架的优化

web框架的一个重要的特点就是更具浏览器端不同的请求执行不同的函数。
今天实现这个功能。 思路流程:
socket通信-->解析url-->更具url匹配对应的函数-->响应

import socket

# 解析url
def geturl(data):
    line1 = str(data).split('\r\n')[0]
    url = line1.split(' ')[1]

    while '/' in url:
        url = url.replace('/','')

    return url

#相应函数
def liubei(url):
    ret = url + ' hello!'
    return bytes(ret, encoding='utf-8')

def guanyu(url):
    ret = url + ' hello!!'
    return bytes(ret, encoding='utf-8')

def zhangfei(url):
    ret = url + ' hello!!!'
    return bytes(ret, encoding='utf-8')

def error_url(url):
    return bytes('not find', encoding='utf-8')

#函数列表
fun_list = [
    {'liubei': liubei},
    {'guanyu': guanyu},
    {'zhangfei': zhangfei}
]

#启动服务器
def start_server():
    sk = socket.socket()

    ip = '127.0.0.1'
    port = 8000

    sk.bind((ip, port))

    sk.listen()

    while True:

        conn, _ = sk.accept()

        data = conn.recv(8192)

        print(data)

        url = geturl(data)

        print(url)

        fun_active = None
        for fun in fun_list:
            if url == tuple(fun.keys())[0]:
                fun_active = tuple(fun.values())[0]
                break
            else:
                fun_active = error_url

        send_data = fun_active(url)

        conn.send(b'HTTP/1.1 200 OK\r\n\r\n')
        conn.send(send_data)

        conn.close()

    sk.close()

#测试代码
if __name__ == '__main__':
    start_server()

代码中包含的python的基础知识

1.replace函数不会改变源字符串,而是返回一个替换后新的字符串。

    while '/' in url:
        url = url.replace('/','')

2.字典到列表的操作:
tuple(dict.keys()) 会返回一个包含所有字典key值得列表。
tuple(dict.values())会返回一个包含所有字典value值得列表。

        for fun in fun_list:
            if url == tuple(fun.keys())[0]:
                fun_active = tuple(fun.values())[0]
                break
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。