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服务器提供,常见的 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

以上是关于9-1 Python WSGI与web框架常考点的主要内容,如果未能解决你的问题,请参考以下文章

py web框架考察点

Python实现简易HTTP服务器与MINI WEB框架(利用WSGI实现服务器与框架解耦)

Python Web框架简介

[Python WEB开发] 使用WSGI开发类Flask框架

python框架Django与WSGI

Python--WSGI