一、總結(jié)一下四種常用的web框架:Django侮措,F(xiàn)lask懈叹,Tornado,Bottle
1.MVC:
總結(jié)框架之前首先總結(jié)一下什么是MVC:
MVC是一種軟件設(shè)計(jì)典范分扎,是一種將業(yè)務(wù)邏輯澄成,數(shù)據(jù)操作,界面展示相分離的設(shè)計(jì)典范,M:model是模型墨状,他主要用來(lái)封裝我們對(duì)數(shù)據(jù)的操作卫漫,V:view是視圖,主要是界面的展示肾砂,C:controller是控制器列赎,是MVC中的核心,他主要用來(lái)接收用戶的請(qǐng)求镐确,來(lái)處理用戶的請(qǐng)求粥谬,進(jìn)行業(yè)務(wù)邏輯的處理,它連接了model和view辫塌。MVC的核心思想是解耦合漏策,將代碼拆分開(kāi),不用牽一發(fā)而動(dòng)全身臼氨。
2.Django:
Django的設(shè)計(jì)模式是MTV掺喻,其實(shí)就是MVC的一個(gè)變種,Django是基于python的重量級(jí)web框架储矩,因?yàn)樗撕诵哪0逡嬉酝飧邪遥€提供了很多包,例如后臺(tái)管理工具admin持隧,靜態(tài)資源Django storages和Django Pipline 即硼,還有djangorestframework來(lái)實(shí)現(xiàn)REST等等,它對(duì)于數(shù)據(jù)庫(kù)的操作是自身的ORM模型(Object Relational Map)對(duì)象關(guān)系映射屡拨,創(chuàng)建模型之后的遷移命令是 python manage.py makemigrations(生成遷移文件)和 python manage.py migrate(將模型遷移到數(shù)據(jù)庫(kù)中)只酥,ORM默認(rèn)連接Sqllite(輕量級(jí)的關(guān)系型數(shù)據(jù)庫(kù)),可以自己配置成MySQL呀狼。
Django的請(qǐng)求生命周期:客戶端發(fā)起請(qǐng)求 > nginx > uwsgi > 請(qǐng)求中間件 > url路由 > view視圖 > ORM獲取數(shù)據(jù) >? view視圖 > 模板渲染 > 服務(wù)器返回響應(yīng)? > uwsgi > nginx > 客戶端顯示
3.Flask:
Flask是基于python的一個(gè)輕量級(jí)web框架裂允,他的設(shè)計(jì)模式是MVC風(fēng)格,他的設(shè)計(jì)是借鑒Django哥艇,F(xiàn)lask的兩個(gè)核心組件:Jinja2是一個(gè)現(xiàn)代的绝编,設(shè)計(jì)師友好的Python模板引擎,模仿Django的模板貌踏。使用可選的沙盒模板執(zhí)行環(huán)境十饥,它具有快速,廣泛使用和安全性祖乳,Werkzeug不是一個(gè)框架逗堵,它是一個(gè)帶有實(shí)用程序的庫(kù),可以創(chuàng)建自己的框架或應(yīng)用程序凡资,因此非常靈活砸捏。
四大內(nèi)置對(duì)象:request 請(qǐng)求對(duì)象,封裝了客戶端發(fā)送的HTTP請(qǐng)求的內(nèi)容; session 用戶會(huì)話,用來(lái)記住請(qǐng)求隙赁; g變量 :充當(dāng)者中間媒介的作用,我們可以通過(guò)它傳遞一些數(shù)據(jù)垦藏; current_app代表當(dāng)前的flask程序?qū)嵗?使用時(shí)需要flask的程序上下文激活
4.Tornado:
是一種基于python的 Web 框架,它的設(shè)計(jì)模式也是MVC伞访,Tornado 和現(xiàn)在的主流 Web 服務(wù)器框架(包括大多數(shù) Python 的框架)有著明顯的區(qū)別:它是非阻塞式服務(wù)器掂骏,而且速度相當(dāng)快。得利于其非阻塞的方式和對(duì)epoll的運(yùn)用厚掷,Tornado 每秒可以處理數(shù)以千計(jì)的連接弟灼,因此 Tornado 是實(shí)時(shí) Web 服務(wù)的一個(gè) 理想框架。
web框架的本質(zhì)就是socket服務(wù)端再加上業(yè)務(wù)邏輯處理冒黑,而torando就是這樣的框架田绑,而Django,F(xiàn)lask抡爹,bottle不同于Torando掩驱,他們只包含了業(yè)務(wù)邏輯處理,他們的使用需要包含socket的第三方模塊(即wsgiref)來(lái)運(yùn)行冬竟。
Tornado中支持兩種路由系統(tǒng)欧穴,正則路由系統(tǒng)以及二級(jí)域名路由系統(tǒng),在Torando中泵殴,默認(rèn)執(zhí)行Handler的get/post等方法之前默認(rèn)會(huì)執(zhí)行initialize方法涮帘,所以可以通過(guò)自定義對(duì)的方式使得所有請(qǐng)求在處理前執(zhí)行操作,initialize就是鉤子函數(shù)笑诅。
5.bottle:
Bottle是一個(gè)簡(jiǎn)單高效的遵循WSGI的微型python Web框架调缨。說(shuō)微型,是因?yàn)樗挥幸粋€(gè)文件吆你,除Python標(biāo)準(zhǔn)庫(kù)外同蜻,它不依賴于任何第三方模塊。
特性:
Routing:把請(qǐng)求映射到函數(shù)早处,建立簡(jiǎn)潔動(dòng)態(tài)的URLs
Templates:采用內(nèi)置模板引擎湾蔓,同時(shí)還支持 mako, jinja2, cheetah 等第三方模板
Utilities:便捷地讀取表單數(shù)據(jù)、上傳文件砌梆、 cookies默责、HTTP頭信息和其它 HTTP相關(guān)的元數(shù)據(jù)
Server:內(nèi)置HTTP開(kāi)發(fā)服務(wù)器,并且支持 paste, fapws3, bjoern, Google App Engine, Cherrypy 或者其它任何WSGI HTTP 服務(wù)器
簡(jiǎn)單介紹幾種類和接口:
bottle.Bottle:? 代表一個(gè)獨(dú)立的wsgi應(yīng)用咸包,由以下部分組成:routes,?callbacks,?plugins,?resources?and?configuration桃序。
bottle.Route:? 封裝了路由規(guī)則與對(duì)應(yīng)的回調(diào)
ServerAdapter:所有bottle適配的web服務(wù)器的基類,子類只要實(shí)現(xiàn)run方法就可以了
bottle.run
? ? 啟動(dòng)wsgi服務(wù)器烂瘫。幾個(gè)比較重要的參數(shù)
? ? app: wsgi application媒熊,即可以是bottle.Bottle 也開(kāi)始是任何滿足wsgi 接口的函數(shù)
? ? server: wsgi http server奇适,字符串
? ? host:port: 監(jiān)聽(tīng)端口
核心邏輯:???? ServerAdapter.run(app)。
MySQL的優(yōu)化:(MySQL的索引是用B+ Tree來(lái)實(shí)現(xiàn)的)
1.合理設(shè)計(jì)表的結(jié)構(gòu)
2.定義字段時(shí)能用varchar盡量不用char
3.利用數(shù)據(jù)庫(kù)的索引進(jìn)行優(yōu)化芦鳍,類似查字典嚷往,先查索引,再根據(jù)索引來(lái)查表
4.數(shù)據(jù)庫(kù)的讀寫(xiě)分離柠衅,一:分析表的屬性皮仁,將寫(xiě)入頻繁的表與讀取頻繁的表分開(kāi)來(lái)放。
二:主從同步菲宴,讀寫(xiě)分離:設(shè)置主表Master和從表Slave贷祈,主表負(fù)責(zé)寫(xiě)入數(shù)據(jù),寫(xiě)入數(shù)據(jù)后同步到從表喝峦,從表負(fù)責(zé)讀取數(shù)據(jù)势誊,以上兩種方法實(shí)現(xiàn)讀寫(xiě)分離
5.數(shù)據(jù)庫(kù)的分表分區(qū):分區(qū)就是把一個(gè)數(shù)據(jù)表的文件和索引分散存儲(chǔ)在不同的物理文件中。
分表和分區(qū)類似谣蠢,區(qū)別是键科,分區(qū)是把一個(gè)邏輯表文件分成幾個(gè)物理文件后進(jìn)行存儲(chǔ),而分表則是把原先的一個(gè)表分成幾個(gè)表漩怎。進(jìn)行分表查詢時(shí)可以通過(guò)union或者視圖勋颖。分表又分垂直分割和水平分割,其中水平分分割最為常用勋锤。水平分割通常是指切分到另外一個(gè)數(shù)據(jù)庫(kù)或表中饭玲。