Django
Django請求流程
? ? ? 1.用戶通過瀏覽器發(fā)送請求
? ? ? 2.請求到達request中間件欺矫,中間件對request請求做預(yù)處理或者直接返回response
? ? ? 3.若未返回response慈缔,會到達urlconf路由灵份,找到對應(yīng)視圖函數(shù)
? ? ? 4.視圖函數(shù)做相應(yīng)預(yù)處理或直接返回response
? ? ? 5.View中的方法可以選擇性的通過Models訪問底層的數(shù)據(jù)
? ? ? 6.取到相應(yīng)數(shù)據(jù)后回到django模板系統(tǒng)阿逃,templates通過filter或tags把數(shù)據(jù)渲染到模板上
? ? ? 7.返回response到瀏覽器展示給客戶
? ? ? 上述流程中最主要的幾個部分分別是:Middleware(中間件,包括request, view, exception, response)骚腥,URLConf(url映射關(guān)系)懊悯,Template(模板系統(tǒng)
注重高效開發(fā)
全自動化的管理后臺(只需要使用起ORM,做簡單的定義区匣,就能自動生成數(shù)據(jù)庫結(jié)構(gòu)偷拔,全功能的管理后臺)
session功能
django的優(yōu)點在于 大和全 ,orm亏钩,template莲绰,view 都自帶了。需要的功能也可以去找第三方的app姑丑。? 缺點嘛也就是自身的一些缺點蛤签,template不怎么好用,數(shù)據(jù)庫用nosql不方便等栅哀。
注重性能優(yōu)越震肮,速度快
解決高并發(fā)
異步非阻塞
websockets 長連接
內(nèi)嵌了HTTP服務(wù)器
單線程的異步網(wǎng)絡(luò)程序,默認(rèn)啟動時根據(jù)CPU數(shù)量運行多個實例留拾;利用CPU多核的優(yōu)勢戳晌。
tornado的模板感覺更簡單點。而且請求處理是基于回調(diào)的非阻塞調(diào)用痴柔,這樣能提高并發(fā)量沦偎。 模板和數(shù)據(jù)庫部分有很多第三方的模塊可供選擇,這樣不利于封裝為一個功能模塊竞帽。缺點倒也不至于扛施,因為本來就打算成為一個輕量級的框架吧
1.要性能, Tornado 首選屹篓;要開發(fā)速度疙渣,Django 和 Flask 都行,區(qū)別是 Flask 把許多功能交給第三方庫去完成了堆巧,因此 Flask 更為靈活妄荔。
2.Tornado實現(xiàn)了異步機制,Django沒有谍肤。
3.Django適合初學(xué)者或者小團隊啦租,Tornado適合高度定制。
Django是基于python的web框架荒揣,直接使用了WSGI篷角,
用于創(chuàng)建模型的對象關(guān)系映射(orm), URL 設(shè)計系任,正則匹配網(wǎng)址恳蹲,
緩存系統(tǒng)虐块,與memcached或其它的緩存系統(tǒng)聯(lián)用,更出色的表現(xiàn)嘉蕾,更快的加載速度贺奠。
架構(gòu)設(shè)計:django是一個基于MVC構(gòu)造的框架,即模型model错忱,視圖view和控制器controller儡率。
django 里更關(guān)注的是模型model、模板template和視圖views以清,稱為 MTV模式儿普。
模型model:數(shù)據(jù)存儲層。處理與數(shù)據(jù)相關(guān)的事物掷倔。
視圖views:表現(xiàn)層箕肃。定義一些方法,處理業(yè)務(wù)邏輯今魔,如何在前端頁面進行數(shù)據(jù)顯示勺像。
模板template:業(yè)務(wù)邏輯層。模型與模板的橋梁错森。
高內(nèi)聚吟宦,低耦合
? ? 高內(nèi)聚:一個模塊內(nèi)部一個功能
? ? 低耦合:每個模塊各司其職,盡量零關(guān)聯(lián)涩维。
如果是正式啟動的新項目殃姓,建議用 django 1.11
django-admin startproject test1
python manage.py startapp booktest
python manage.py makemigrations
python manage.py migrate
1.1.3.6測試數(shù)據(jù)操作? python manage.py shell
python manage.py runserver ip:port
python manage.py createsuperuser,按提示輸入用戶名瓦阐、郵箱蜗侈、密碼
Orm的理解:
ORM是“對象-關(guān)系-映射”的簡稱,
1.根據(jù)對象的類型生成表結(jié)構(gòu)
2.將對象睡蟋、列表的操作踏幻,轉(zhuǎn)換為sql語句
3.將sql查詢到的結(jié)果轉(zhuǎn)換為對象、列表
在站點的 __init__.py 文件中添加
import pymysql
pymysql.install_as_MySQLdb()
4.屬性命名限制
a)不能是python的保留關(guān)鍵字
b)由于django的查詢方式戳杀,不允許使用連續(xù)的下劃線
關(guān)系的類型包括:
1.ForeignKey:一對多该面,將字段定義在多的端中
2.ManyToManyField:多對多,將字段定義在兩端中
3.OneToOneField:一對一信卡,將字段定義在任意一端中
用一訪問多:對象.模型類小寫_set
? ? bookinfo.heroinfo_set
用一訪問一:對象.模型類小寫
? ? heroinfo.bookinfo
訪問id:對象.屬性_id
? ? heroinfo.book_id
1.2.4模型查詢 :
? ? a)查詢集
? ? b)字段查詢:比較運算符隔缀,F(xiàn)對象,Q對象
8.查詢集的緩存
? ? 構(gòu)成了兩個查詢集傍菇,無法重用緩存
? ? 兩次循環(huán)使用同一個查詢集猾瘸,第二次使用緩存中的數(shù)據(jù)
自鏈接
class AreaInfo(models.Model):
? ? atitle = models.CharField(max_length=20)
? ? aParent = models.ForeignKey('self', null=True, blank=True)
上級對象:area.aParent
下級對象:area.areainfo_set.all()