WSGI模块及Django请求的生命周期
1. WSGI模块
1.1 基本概念
1.1.1 WSGI(Web Server Gateway Interface/Web服务网管接口)是一种协议规范,定义了使用Python编写web app 与 web server之间接口格式,实现web与webserver之间的解耦.
1.1.2 wsgiref与uwsgi区别
- wsgiref + Django 性能较低 无并发
- uwsgi + Django 性能高 工作使用
1.2 基本原理
1.2.1 WSGI基本原理
- import socket
- def main():
- sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
- sock.bind(('localhost',8000))
- sock.listen(5)
- while True:
- connection, address = sock.accept()
- v = client.recv(1024)
- # 自己解析:各种split分割
- # 请求相关
- # Django操作
- # 产出字符串
- client.send(产出字符串)
- client.close()
- if __name__ == '__main__':
- main()
1.2.2 wsgiref实现原理
- from wsgiref.simple_server import make_server
- def RunServer(environ, start_response):
- # environ 请求相关的所有操作
- # start_response 要返回的数据
- # Django框架的开始
- # 中间件
- # 路由系统
- # 视图函数
- # 模板渲染
- start_response('200 OK', [('Content-Type', 'text/html')]) # 请求头相关数据,本函数中相当于响应头
- return [bytes('<h1>Hello, web!</h1>', encoding='utf-8'), ] # 本函数中相当于响应体
- if __name__ == '__main__':
- httpd = make_server('127.0.0.1', 8000, RunServer)
- httpd.serve_forever()
2. Django请求的生命周期
其中Django模块包括中间件/视图函数/数据库/模板获取数据/渲染