一、考點聚焦
WSGI ;常見web 框架 1.什么是WSGI ? 2.常用的 Python Web 框架 Django /Flask /Tornado 對比 3.Web 框架的組成(淡化框架、加強基礎(chǔ))
二、什么是WSGI ?
為什么需要它?我們經(jīng)常使用uwsgi /gunicorn 來部署Django /Flask 應(yīng)用,為什么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 ,一個可調(diào)用對象- 參數(shù):
environ :一個包含 WSGI 環(huán)境信息的字典,由WSGI 服務(wù)器提供,常見的 key 有PATH_INFO , QUERY_STRING 等start_response :生成WSGI 響應(yīng)的回調(diào)函數(shù),接收兩個參數(shù),status 和headers - 函數(shù)返回響應(yīng)體的迭代器
我們編寫一個兼容 WSGI 的web 小應(yīng)用:
def myapp(environ, start_response):
print9environ['QUERY_STRING'] # web server 把HTTP參數(shù)信息通過 environ 傳遞給 web 框架
status = '200 ok'
headers = [('Content-Type', 'text/html; charset=utf8')]
start_response(status, headers)
return [b'<h1>Hello World</h1>'] # 可迭代對象,返回 字節(jié)
if __name__ == '__main__':
from wsgiref.simple_server import make_server
httpd = make_server('127.0.0.1', 8888, myapp)
httpd.serve_forever()
運行結(jié)果:
封裝示例:
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 :大而全,內(nèi)置ORM 、Admin 等組件,第三方插件較多 2.Flask :微框架,插件機制,比較靈活。(可以用cookiecutter-flask 生成統(tǒng)項目模板) 3.Tornado :異步支持的微框架和異步網(wǎng)絡(luò)庫
四、什么是MVC ?
MVC :模型(Model ),視圖(View ),控制器(Controller ) 是為了解耦數(shù)據(jù)、展示和操作 1.Model :負責(zé)業(yè)務(wù)對象和數(shù)據(jù)庫的交互(ORM ) 2.View :負責(zé)與用戶的交互展示 3.Controller :接收請求參數(shù)調(diào)用模型和視圖完成請求
處理流程:
五、什么是ORM ?
Object Relational Mapping ,對象關(guān)系映射。比如:Sqlalchemy 、Django ORM 、Peewee 1.用于實現(xiàn)業(yè)務(wù)對象與數(shù)據(jù)表中的字段映射。 2.優(yōu)勢:代碼更加面向?qū)ο?,代碼量更少,靈活性高,提升開發(fā)效率 3.缺點:拼接對象比較耗時,有一定性能影響
六、一個Web 框架的組成?
1.中間件,用于請求之前和請求之后做一些處理(比如記錄日志等) 2.路由、表單驗證、權(quán)限認證,ORM ,視圖函數(shù),模板渲染,序列化 3.第三方插件:Redis 連接,RESTful 支持等
七、什么是Gunicorn ?
Gunicorn :Python WSGI HTTP Server 1.純Python 編寫的高性能的WSGI Server 2.pre-fork 預(yù)先分配多個worker 進程處理請求(master-slave ) 3.多種workder 支持:Sync /Async (Gevent )/Tornado /AsyncIO
|