分享

9

 TIANSHIBWG 2021-06-21

一、考点聚焦

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服务器提供,常见的 keyPATH_INFO, QUERY_STRING
    • start_response:生成WSGI响应的回调函数,接收两个参数,statusheaders
  • 函数返回响应体的迭代器

我们编写一个兼容 WSGIweb小应用:

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:大而全,内置ORMAdmin等组件,第三方插件较多
2.Flask:微框架,插件机制,比较灵活。(可以用cookiecutter-flask生成统项目模板)
3.Tornado:异步支持的微框架和异步网络库

四、什么是MVC

MVC:模型(Model),视图(View),控制器(Controller)
是为了解耦数据、展示和操作
1.Model:负责业务对象和数据库的交互(ORM
2.View:负责与用户的交互展示
3.Controller:接收请求参数调用模型和视图完成请求

处理流程:
在这里插入图片描述

五、什么是ORM

Object Relational Mapping,对象关系映射。比如:SqlalchemyDjango ORMPeewee
1.用于实现业务对象与数据表中的字段映射。
2.优势:代码更加面向对象,代码量更少,灵活性高,提升开发效率
3.缺点:拼接对象比较耗时,有一定性能影响

六、一个Web框架的组成?

1.中间件,用于请求之前和请求之后做一些处理(比如记录日志等)
2.路由、表单验证、权限认证,ORM,视图函数,模板渲染,序列化
3.第三方插件:Redis连接,RESTful支持等

七、什么是Gunicorn?

GunicornPython WSGI HTTP Server
1.纯Python编写的高性能的WSGI Server
2.pre-fork预先分配多个worker进程处理请求(master-slave)
3.多种workder支持:Sync/Async(Gevent)/Tornado/AsyncIO
在这里插入图片描述
在这里插入图片描述

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多