python基础7-web框架

web框架本质就是一个socket server,用户浏览器就是一个socket client

import socket
def handle_request(client):
    buf = client.recv(1024)
    client.send(b"HTTP/1.1 200 OK\r\n\r\n")
    client.send(b'It works!')
def main():
    sock = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
    sock.bind(("localhost",8000))
    sock.listen(5)      #最多允许排队5个
    while True:
        connection,address = sock.accept()
        handle_request(connection)
        connection.close()
if __name__ == "__main__":
    main()
socket_server

WSGI(Web Server Gateway Interface)是一种规范,它定义了使用python编写的web app与web server之间接口格式,实现web app与web server间的解耦。

python标准库提供的独立WSGI服务器称为wsgiref。

from wsgiref.simple_server import make_server
  
def RunServer(environ, start_response):
    start_response('200 OK', [('Content-Type', 'text/html')])
    return [bytes('<h1>Hello, web框架!</h1>', encoding='utf-8'), ]
  
if __name__ == '__main__':
    httpd = make_server('', 9000, RunServer)
    print("Serving HTTP on port 9000...")
    httpd.serve_forever()

  

自定义web框架

通过python标准库提供的wsgiref模块开发一个自己的Web框架

from wsgiref.simple_server import make_server

from Controller import func

URL_DICT = {
    '/index':func.handle_index,
    '/date':func.handle_date,
}
def RunServer(environ, start_response):
    #environ 客户端发来的所有数据
    #start_response 封装要返回给用户的数据,响应头和状态码
    start_response('200 OK', [('Content-Type', 'text/html')])
    #   返回的内容
    print(environ["PATH_INFO"])
    current_url = environ["PATH_INFO"]
    # if current_url == "/index":
    #     return handle_index()
    # elif current_url == "/date":
    #     return handle_date()
    # else:
    #     return [bytes('<h1>404!</h1>', encoding='utf-8'), ]
    func = None
    if current_url in URL_DICT:
        func = URL_DICT[current_url]
    if func:
        return func()
    else:
        return [bytes('<h1>404!</h1>', encoding='utf-8'), ]


    # return [bytes('<h1>Hello, web!</h1>', encoding='utf-8'), ]


if __name__ == '__main__':
    httpd = make_server('', 8000, RunServer)
    print("Serving HTTP on port 8000...")
    httpd.serve_forever()
s12.py
def handle_index():
    # return [bytes('<h1>Hello, index!</h1>', encoding='utf-8'), ]
    import time
    v = str(time.strftime("%Y-%m-%d %H:%M:%S , %z , %a , %A"))
    f = open('View/index.html',mode='rb')
    data = f.read()
    f.close()
    data =data.replace(b'index',v.encode('utf-8'))
    return [data,]
def handle_date():
    return [bytes('<h1>Hello, date!</h1>', encoding='utf-8'), ]
func.py
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>index</title>
</head>
<body>
    <h1>index</h1>
</body>
</html>
index.html

 

 

 

总结:

MVC
Model View Controller
数据库  模板文件 业务处理

MTV
Model Template View
数据库  模板文件 业务处理

 

 

 

 



posted @ 2018-02-22 09:26  larlly  阅读(127)  评论(0)    收藏  举报