Web服務器網關接口(Python Web Server Gateway Interface,縮寫爲WSGI)是爲Python語言定義的Web服務器和Web應用程序或框架之間的一種簡單而通用的接口。自從WSGI被開發出來之後,許多其它語言中也出現了相似接口。html
WSGI區分爲兩個部分:一爲「服務器」或「網關」,另外一爲「應用程序」或「應用框架」。在處理一個WSGI請求時,服務器會爲應用程序提供環境信息及一個回調函數(Callback Function)。當應用程序完成處理請求後,透過前述的回調函數,將結果回傳給服務器。python
所謂的 WSGI 中間件同時實現了API的兩方,所以能夠在WSGI服務器和WSGI應用之間起調解做用:從Web服務器的角度來講,中間件扮演應用程序,而從應用程序的角度來講,中間件扮演服務器。「中間件」組件能夠執行如下功能:git
實現該協議的模塊:web
FBV——url —— 函數redis
CBV——url —— view數據庫
什麼是RESTful架構:django
(1)每個URI表明一種資源;json
(2)客戶端和服務器之間,傳遞這種資源的某種表現層;api
(3)客戶端經過四個HTTP動詞,對服務器端資源進行操做,實現"表現層狀態轉化"。瀏覽器
1. 路由
2. 視圖
3. 版本
4. 認證
寫一個類並註冊到認證類,在類的的authticate方法中編寫認證邏輯。
5. 權限
寫一個類並註冊到權限類,在類的的has_permission方法中編寫認證邏輯。
6. 頻率限制
寫一個類並註冊到頻率類,在類的的 allow_request/wait 方法中編寫認證邏輯。
allow_request True False 若是返回False,那麼就要執行wait
7. 解析器
根據ContentType請求頭,選擇不一樣解析器對 請求體中的數據進行解析。
POST /index/ http1.1.\r\nhost:11.11.11.11\r\nContent-Type:url-formendo.... \r\n\r\nuser=alex&age=123
POST /index/ http1.1.\r\nhost:11.11.11.11\r\nContent-Type:application/json\r\n\r\n{....}
8. 分頁
緣由:頁碼越大向後須要掃描的行數越多,由於每次都是從0開始掃描。
解決:
- 限制顯示的頁數 - 記錄當前頁數據ID最大值和最小值,再次分頁時,根據ID現行篩選,而後再分頁。
答案詳解:TCP握手與揮手
用於操做內存的軟件。
能夠作持久化:
至關因而大字典
單進程單線程
select_related,連表操做,至關於主動作join
prefeth_related,屢次單表操做,先查詢想要的數據,而後構造條件,如:id=[1,2,3],再次查詢其餘表根據id作條件。
only
defer
F
Q
經過ORM寫偏原生SQL:
Entry.objects.extra(select={'new_id': "select col from sometable where othercol > %s"}, select_params=(1,)) Entry.objects.extra(where=['headline=%s'], params=['Lennon']) Entry.objects.extra(where=["foo='a' OR bar = 'a'", "baz = 'a'"]) Entry.objects.extra(select={'new_id': "select id from tb where id > %s"},select_params=(1,), order_by=['-nid'])
# 執行原生SQL models.UserInfo.objects.raw('select * from userinfo') # 若是SQL是其餘表時,必須將名字設置爲當前UserInfo對象的主鍵列名 models.UserInfo.objects.raw('select id as nid from 其餘表') # 爲原生SQL設置參數 models.UserInfo.objects.raw('select id as nid from userinfo where nid>%s', params=[12,]) name_map = {'first': 'first_name', 'last': 'last_name', 'bd': 'birth_date', 'pk': 'id'} Person.objects.raw('SELECT * FROM some_other_table', translations=name_map)
from django.db import connection, connections cursor = connection.cursor() # cursor = connections['default'].cursor() cursor.execute("""SELECT * from auth_user where id = %s""", [1]) row = cursor.fetchone() # fetchall()/fetchmany(..)
queryset = models.Course.objects.using('default').all()
進行版本控制,實現協同開發