一、考点聚焦
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
|