django 之 Django请求生命周期
写在前沿:
django 是用来开发web框架,直接利用框架里的方法,在框架的基础上实现功能。
django目录下:
settings.py 存放配置文件
urls.py 用于构建路由系统
wsgi.py django 叫web服务网关接口,也是一个协议,调用python内置的wsgiref模块,实现socket。本质上代指的就是socket。
manage.py 用于框架的管理。
1. Http协议特点:无状态,短连接
2. 浏览器与网站之间的通信,实质上是基于socket来实现的:浏览器是<socket客户端>,网站是<socket服务端>,
3. 如果我们自己搭建一个网站,那以下三大部分是必不可少的:
a. socket服务端:既然是基于socket实现通信,那浏览器充当客户端,但服务端还是需要我们来搭建。
b. 路由系统:根据URL不同返回不同的内容 URL -> 函数
c. 数据以字符串形式返回给用户
这里边就涉及到模板引擎渲染的问题:
HTML充当模板(特殊字符)
自己创造任意数据以字符串的形式传递给模版,
模版渲染之后发送给浏览器显示。
4. 手动编写Web框架那工程量就太大,所以我们可以借用别人写好的web框架来实现我们需要的功能。
不管是哪种框架都必须以上边三个条件来实现。
框架种类:
- a,b,c 三个方法都有 --> Tornado 框架内部已封装了三种操作
- [第三方a],b,c(缺少其中一个) --> wsgiref -> Django 框架以第三方通信协议来实现socket通信,其他两块内部已封装好操作。
- [第三方a],b,[第三方c] --> flask, 框架使用第三方的socket通信和模版渲染规则,自己内部封装了路由系统的操作。
分类:
- Django框架(Web。。。。。。)
- 其他
MVC和MTV普及
models(数据库,模型) views(html模板) controllers(业务逻辑处理) --> MVC
models(数据库,模型) templates(html模板) views(业务逻辑处理) --> MTV
Django -> MTV
什么是web框架
框架,即framework,特指为解决一个开放性问题而设计的具有一定约束性的支撑结构,使用框架可以帮你快速开发特定的系统,简单地说,就是你用别人搭建好的舞台来做表演。
web应用 访问请求流程
Django请求生命周期
web框架本质:socket
作为web框架种的一种,django是以第三方通信协议来实现socket通信,本身没有封装socket方法。同时django自己内部又是默认以wsgi用于socket通信。因此django的请求生命周期可以认为有两大类来实现。(wsgi性能太低,仅用于测试,一般都是使用uwsgi)
- wsgi+django(web框架) --> 框架内部又可以分为:中间件,路由系统,视图函数,数据库操作,模版渲染,等
明确一点:可以实现socket通信的协议真心有很多……
'cgi': CGIServer,
'flup': FlupFCGIServer,
'wsgiref': WSGIRefServer,
'waitress': WaitressServer,
'cherrypy': CherryPyServer,
'paste': PasteServer,
'fapws3': FapwsServer,
'tornado': TornadoServer,
'gae': AppEngineServer,
'twisted': TwistedServer,
'diesel': DieselServer,
'meinheld': MeinheldServer,
'gunicorn': GunicornServer,
'eventlet': EventletServer,
'gevent': GeventServer,
'geventSocketIO':GeventSocketIOServer,
'rocket': RocketServer,
'bjoern' : BjoernServer,
'auto': AutoServer,
- 基本操作举例:Wsgi+Django
from wsgiref.simple_server import make_server def RunServer(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()
大神手笔----> Django运行方式及处理流程总结