9-1 Python WSGI与web框架常考点
Posted WinvenChang
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了9-1 Python WSGI与web框架常考点相关的知识,希望对你有一定的参考价值。
一、考点聚焦
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
以上是关于9-1 Python WSGI与web框架常考点的主要内容,如果未能解决你的问题,请参考以下文章
Python实现简易HTTP服务器与MINI WEB框架(利用WSGI实现服务器与框架解耦)