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()
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()
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'), ]
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>index</title> </head> <body> <h1>index</h1> </body> </html>
总结:
MVC
Model View Controller
数据库 模板文件 业务处理
MTV
Model Template View
数据库 模板文件 业务处理

浙公网安备 33010602011771号