2020-06-11 Day2 wsgiref库的使用和web框架的总结

web框架的总结:

  • 本质:服务器和浏览器之间的socket通信。
  • 后端功能划分:
    1.和浏览器收发消息
    2.解析浏览器访问路径执行不同的函数
    3.读取html文件,并且字符串替换实现动态响应。

返回网页

  • 本质是读取html文件,转成二进制的字符串然后响应页面。
  • 动态网页:本质是字符串替换,替换的过程发生在服务器端。

Django:

  • Django自带2,3功能,1功能使用第三方库wsgiref。
  • Django的3功能和jinja2很相似。

使用wsgiref第三方库优化服务端

服务器代码

# import socket
from wsgiref.simple_server import make_server

#相应函数
def liubei(url):
    #读取html文件 'rb'以二进制的形式读取
    with open('liubei.html', 'rb') as f:
        ret = f.read()

    return ret

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 view(environ, start_response):

    print(environ)

    url = environ.get('PATH_INFO') #根据字典的键值对取得当前请求的路径
    print(url)

    start_response('200 OK', [])

    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)

    return [send_data]


if __name__ == '__main__':
    sk = make_server('127.0.0.1', 8080, view)
    sk.serve_forever()


html页面




    
    Title


hello 玄德

运行结果


2.PNG

你可能感兴趣的:(2020-06-11 Day2 wsgiref库的使用和web框架的总结)