由于无论是django也好 市场上最火的什么MVC框架也好他就是基于这一套东西,来给你进行一些功能的封装让你用着特别方便,咱们要作的不止是学会这些框架学框架的时候要有本身的想法,要知道这个框架的这个地方本身好像试着作也能作出来废话很少说 铁子 奥力给!!css
Web 应用框架,或者简单的说是“Web 框架”,实际上是创建 web 应用的一种方式。从简单的博客系统到复杂的富 AJAX 应用,web 上每一个页面都是经过写代码来生成的。我发现不少人都热衷于学习 web 框架技术,例如 Flask 或这 Django 之类的,可是不少人并不理解什么是 web 框架,咱们须要理解 Web 如何“工做”的。为此,我将深刻挖掘你在浏览器里输入一个 URL 按下 Enter 以后都发生了什么。html
Web服务器是否是第一个名词上来就让你头大了 你能够这么理解Web服务器他就是一个中间层他负责处理客户端和服务端之间交互的工做 那咱们能不能本身写一个Web服务器 咱们都学过最简单的python基于Socket的网络通讯,在那里边咱们是否是写一个客户端只须要绑定一个端口 而后.listen就能够了python
#简单服务器
import socket
server = socket.socket()
ip_port = ('127.0.0.1',8080)
server.bind(ip_port)
server.listen()
while 1:
conn,addr = server.accept()
msg = conn.recv(1024).decode('utf-8')
print(msg)
conn.close()
这样是否是咱们本身写了一个‘服务端’, 咱们基于本身再写一个客户端就能够访问这个端口,那么基于浏览器呢?咱们在浏览器url栏上输入127.0.0.1/8080以后看会出现什么web
首先咱们的客户端打印了请求的信息那么是否是说明浏览器能够理解成一个别人写好的客户端呢?先不要着急咱们继续看浏览器说什么django
浏览器
浏览器告诉咱们咱们并无发送任何数据 这个合理可是咱们不发送数据最多不就是阻塞住吗 为何会报错呢?服务器
这就引出了咱们的下一个话题 HTTP协议网络
还记得咱们接受到的浏览器请求信息吗 第一行是GET/ HTTP /1.1那么这是什么东西呢?你能够暂时理解为浏览器给咱们的要求 要求咱们用HTTP协议来给浏览器进行回应框架
关于HTTP协议详情可参见 http://www.javashuo.com/article/p-gupevnoh-by.htmlsocket
那么咱们就知道了咱们按照HTTP协议来对他进行回应不就行了
因此修改咱们的本身的服务器代码
#可让浏览器有反应的服务器
import socket
server = socket.socket()
ip_port = ('127.0.0.1',8080)
server.bind(ip_port)
server.listen()
while 1:
conn,addr = server.accept()
msg = conn.recv(1024).decode('utf-8')
print(msg)
conn.send('HTTP/1.1 200 OK/r/n/r/n') #为何这么发后面会给你们解释到
conn.close()
而后继续看咱们这样了以后浏览器会有什么反应呢
咱们的浏览器如今才是阻塞住了 你能够理解为如今的浏览器是在 conn.recv()就是说他如今才是等待这接收消息,那么这个东西是否是能够理解为浏览器每一次收东西以前都会先收一个响应头咱们就是给他发这么一个响应头他就默认开始接收状态了
如今咱们发送一串字符串‘HELLO WEB’
#像级了web服务器的服务器
import socket
server = socket.socket()
ip_port = ('127.0.0.1',8080)
server.bind(ip_port)
server.listen()
while 1:
conn,addr = server.accept()
msg = conn.recv(1024).decode('utf-8')
print(msg)
conn.send('HTTP/1.1 200 OK\r\n\r\n')#为何这么发后面会给你们解释到
conn.send(b'HELLO WEB') #字节流形式
conn.close()
效果如图
如今咱们能够接收到字符串了 那咱们的这个服务器是否是就是一个web服务器了对吧
这时有人问了 你连个页面都没有只有字符串算什么web服务器?
关于这个我们在进行最后一次扩展
#web服务器
import socket
server = socket.socket()
ip_port = ('127.0.0.1',8080)
server.bind(ip_port)
server.listen()
while 1:
conn,addr = server.accept()
msg = conn.recv(1024).decode('utf-8')
print(msg)
conn.send('HTTP/1.1 200 OK\r\n\r\n')#为何这么发后面会给你们解释到
with open('index.html',mode='rb') as f:
data = f.read()
conn.send(data)
conn.close()
怎么样如今能够说是个web框架了吧 只不过咱们没什么功能对吧?那就对了