框架基础
框架实质:
所有的Web应用,本质上其实就是一个socket服务端,用户的浏览器其实就是一个socket客户端
B/S结构的响应:
import socket
def handle_request(client):
buf = client.recv(1024)
client.send("HTTP/1.1 200 OK ".encode("utf8"))
client.send("
Hello, yuan
".encode("utf8"))def main():
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.bind(('localhost',8001))
sock.listen(5)
while True:
connection, address = sock.accept()
handle_request(connection)
connection.close()
if __name__ == '__main__':
main()
WSGI: web server gateway interface
1.封装了socket对象以及准备过程[socket创建,bind, listen]
2.通过version,将所有的请求对象进行了封装,键值对通过字典的形式封装,通过key可以获取value
3.通过start_response()可以很方便的设置response响应头
常识:
请求分为请求头和请求体
如果是get请求: 数据包装在url里面,不需要请求体,只有请求头
如果是post请求: 数据包装在请求体里面
注意: 请求头和请求体通过2个换行符分隔
from wsgiref.simple_server import make_server
// application()函数必须由WSGI服务器来调用,因为我们本身无法传递实参给函数,实参是内部封装的。
def application(environ, start_response):
start_response('200 OK', [('Content-Type', 'text/html')])
return [b'
Hello, web!
']httpd = make_server('', 8080, application)
print('Serving HTTP on port 8000...')
# 开始监听HTTP请求:
httpd.serve_forever()
MVC &&MTV
MVC就是把web应用分为模型(M),控制器(C),视图(V)三层;他们之间以一种插件似的,松耦合的方式连接在一起。
模型负责业务对象与数据库的对象(ORM),视图负责与用户的交互(页面),控制器(C)接受用户的输入调用模型和视图完成用户的请求。
Django的MTV模式本质上与MVC模式没有什么差别,也是各组件之间为了保持松耦合关系,只是定义上有些许不同,Django的MTV分别代表:
Model(模型):负责业务对象与数据库的对象(ORM)
Template(模版):负责如何把页面展示给用户(存储HTML文件)
View(视图):负责业务逻辑,并在适当的时候调用Model和Template(类似MVC中的Conrtoller)
此外,Django还有一个url分发器,它的作用是将一个个URL的页面请求分发给不同的view处理,view再调用相应的Model和Template