Django web框架本质
一、所有WEB框架的本质都是一个socket链接
所有web框架的本质都是一个socket链接。而Django是使用Python开发的提供功能最大最全的个框架
所有python web框架核心可用下面一段py代码展示:
import socket
def handle_request(server):
buffer = server.recv(1024)
server.send('HTTP///200 OK \r\n\r\n".encode())
server.send('你好,这是web'.encode())
def main():
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.bind((IP, PORT))
sock.listen(5)
while True:
conn, addr = sock.accept()
handle_request(conn)
conn.close()
if __name__ == '__main__':
main()
1.2 wsgi规则(协议)下的实现
django 默认调用的socket就是满足wsgi规则的 wsgiref模块
使用wsgiref 写一个简单的web
from wsgiref.simple_server import make_server
def index(request):
"""
:param request: 里面封装了所有客户端发来的数据
:return: 返回给客户端的页面
"""
#做好相应处理,如验证,然后打开页面文件,然后返回页面
f = open('index.html', 'rb')
file = f.read()
return [ file, ]
def home(request):
#同上面一样,不过返回不同页面
pass
URL_DICT = {
'/index': index,
'/home': home,
#等等很多页面
}
def Run_server(environ, start_response):
"""
:param environ: 里面封装了客户端发来所有数据,如url,请求头,状态,浏览器信息等
:param start_response: 该参数用来封装返回给用户的数据。响应头 响应状态等
:return: 返回给客户端页面内容
"""
start_response('200 OK', [('Content-Type', 'text/html')])
current_url = environ['PATH_INFO'] #拿到请求的url
#查看本地是否有该url服务
if current_url in URL_DICT:
res = URL_DICT[current_url](environ) #本地提供该url服务,拿到地址直接运行
else:
res = ['<div style='margin:0 auto;'><center>404 not found </center></div>'.encode(), ] #请求的url不存在,返回404页面
return res
if __name__ == '__main__':
httpd = make_server('', 8000, Run_server)
httpd.serve_forver()
wsgiref模块内部封装了一个socket server,只要来一个请求就是调用一次 run_server
人生还有意义。那一定是还在找存在的理由