WSGI
;常见web
框架
1.什么是WSGI
?
2.常用的 Python Web
框架 Django
/Flask
/Tornado
对比
3.Web
框架的组成(淡化框架、加强基础)
WSGI
?为什么需要它?我们经常使用uwsgi
/gunicorn
来部署Django
/Flask
应用,为什么Flask
/Django
都可以运行在gunicorn
之上?
1.Python Web Server Gateway Interface(pep3333)
2.解决 Python Web Server
乱象 mod_python
, CGI
, FastCGI
等
3.描述了Web Server(Gunicorn/uWSGI)
如何与Web
框架(Flask
/Django
)交互,Web
框架如何处理请求
def application(environ, start_response)
application
就是WSGI app
,一个可调用对象environ
:一个包含 WSGI
环境信息的字典,由WSGI
服务器提供,常见的 key
有PATH_INFO
, QUERY_STRING
等start_response
:生成WSGI
响应的回调函数,接收两个参数,status
和headers
我们编写一个兼容 WSGI
的web
小应用:
def myapp(environ, start_response):
print9environ['QUERY_STRING'] # web server 把HTTP参数信息通过 environ 传递给 web 框架
status = '200 ok'
headers = [('Content-Type', 'text/html; charset=utf8')]
start_response(status, headers)
return [b'<h1>Hello World</h1>'] # 可迭代对象,返回 字节
if __name__ == '__main__':
from wsgiref.simple_server import make_server
httpd = make_server('127.0.0.1', 8888, myapp)
httpd.serve_forever()
运行结果:
class Application:
def __init__(self, routers, **kwargs):
self.routers = routers
def __call__(self, environ, start_response):
try:
request = Request(environ)
callback, args = routers.match(request.path)
response = callback(request, *args)
except NotFoundError:
response = Response("<h1>Not Found</h1>", status=404)
start_response(response.status, response.headers.items())
return iter(response)
Python Web
框架对比Django vs Flask vs Tornado
1.Django
:大而全,内置ORM
、Admin
等组件,第三方插件较多
2.Flask
:微框架,插件机制,比较灵活。(可以用cookiecutter-flask
生成统项目模板)
3.Tornado
:异步支持的微框架和异步网络库
MVC
?MVC
:模型(Model
),视图(View
),控制器(Controller
)
是为了解耦数据、展示和操作
1.Model
:负责业务对象和数据库的交互(ORM
)
2.View
:负责与用户的交互展示
3.Controller
:接收请求参数调用模型和视图完成请求
处理流程:
ORM
?Object Relational Mapping
,对象关系映射。比如:Sqlalchemy
、Django ORM
、Peewee
1.用于实现业务对象与数据表中的字段映射。
2.优势:代码更加面向对象,代码量更少,灵活性高,提升开发效率
3.缺点:拼接对象比较耗时,有一定性能影响
Web
框架的组成?1.中间件,用于请求之前和请求之后做一些处理(比如记录日志等)
2.路由、表单验证、权限认证,ORM
,视图函数,模板渲染,序列化
3.第三方插件:Redis
连接,RESTful
支持等
Gunicorn
?Gunicorn
:Python WSGI HTTP Server
1.纯Python
编写的高性能的WSGI Server
2.pre-fork
预先分配多个worker
进程处理请求(master-slave
)
3.多种workder
支持:Sync
/Async
(Gevent
)/Tornado
/AsyncIO
联系客服