对于所有的 web 应用,本质上其实就是一个 socket 服务端,用户的浏览器其实就是一个 socket 客户端。
- 1 #!/usr/bin/env python
- 2 #coding:utf-8
- 3
- 4 import socket
- 5
- 6 def handle_request(client):
- 7 buf = client.recv(1024)#获取客户端发过来的数据
- 8 client.send("HTTP/1.1 200 OK\r\n\r\n")
- 9 client.send("Hello, Seven")
- 10
- 11 def main():
- 12 sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) #创建一个socket服务端对象
- 13 sock.bind(('localhost',8000))#监听8000端口
- 14 sock.listen(5)#最多5个连接
- 15
- 16 while True: #一直在等待连接
- 17 connection, address = sock.accept()#如果有连接,就会获取到值
- 18 handle_request(connection)#获取到值之后调用handle_request处理
- 19 connection.close()#处理完成这个请求后断开这次连接
- 20
- 21 if __name__ == '__main__':
- 22 main()
- 所有web框架的本质就是这20几行代码
python 标准库提供的独立 WSGI 服务器称为 wsgiref。
- 1 #!/usr/bin/env python
- 2 #coding:utf-8
- 3
- 4 from wsgiref.simple_server import make_server
- 5
- 6 def RunServer(environ, start_response):
- #environ 客户端发来的所有数据
- #start_response 封装要返回给用户的数据(响应头、状态之类的)
- 7 start_response('200 OK', [('Content-Type', 'text/html')])
- 8 return '<h1>Hello, web!</h1>'
- #返回的内容
- python3中:
- #return ['
- Hello, web!
- '.encode('utf-8')](返回的是列表形式)
- 10 if __name__ == '__main__':
- 11 httpd = make_server('', 8000, RunServer)
- 12 print "Serving HTTP on port 8000..."
- 13 httpd.serve_forever()
- #查看请求,通过pycharm断点
web 框架定义好后,所有用户来访问都是返回的同一个内容,通过请求中的内容(url)区分,返回不同的内容
MVC
Model view Controller
数据库 模板文件 业务处理
MTV
Model view Controller
数据库 模板文件 业务处理
区别就是文件夹名字的区别,处理过程是一样的
来源: