一、MTV流程
- 組成
- model、view、template、urls
- Django中流程
- 客戶端 --- > urls
- urls ---> views
- views ---> models
- models ---> views
- views ---> template
- template ---> 客戶端
二、Models
- 模型
- Django
- 數據操作封裝
- 定義數據表結構
- 模型類、表、屬性、字段
- 定義模型
- 繼承自Model
- 定義字段
- 字段類型
- CharField、TextField、IntegerField、FloatField、BooleanField、DecimalField、NullBooleanField、AutoField、FileField、ImageField
- 字段約束
- max_length、default、unique、index、primary_key、db_column
- 字段類型
- 映射到數據庫中
- 生成遷移文件
- 執行遷移
- 前提:數據庫配置完畢
- 默認配置爲SQLite
- 自主配置MySQL
- 引擎、數據庫名、用戶名、密碼、主機、端口、驅動,需要僞裝
- ORM
- Object Relational Mapping 對象關係映射
- 將業務邏輯和SQL語句進行解耦——核心思想:解耦合
- 可以理解ORM爲翻譯機
- CURD
- CREATE 創建
- Save
- 創建對象
- 直接實例化對象,設置屬性
- 創建對象,傳入屬性
- 使用Model.objects.create()
- 自己封裝類方法創建
- 在Manager中封裝方法創建
- UPDATE 更新
- 基於查詢
- save
- DELETE 刪除
- 基於查詢
- save
- 查詢——查詢句柄——objects
- 隱性屬性
- Manager實例
- 獲取查詢結果集QuerySet
- all、filter、exclude、order_by、values
- 切片
- 不支持負數
- 實際上相當於limit offset
- 懶查詢
- 觀察者模型
- 發佈者訂閱者
- 廣播
- 獲取單個對象
- get
- 不存在會拋出異常 DoesNotExist
- 存在多於一個MultipleObjectsReturned
- 使用這個函數記得捕獲異常
- last
- first
- 坑點
- 可能出現第一個和最後一個是一樣的情況
- 需要主動進行排序
- get
- 條件
- 屬性_操作符=臨界值
- gt
- gte
- lt
- lte
- in
- exact
- startswith
- endswith
- contains
- ignore:iexact、icontains、istartswith、iendswith
- 條件升級
- F
- 獲取字段信息
- 通常用在模型的自我屬性比較
- 支持算術運算
- Q
- 條件封裝
- 支持邏輯運算
- 與或非、&、|、~
- F
- 內置函數
- count、exists
- 聚合函數
- 操作列、Max、Avg、Min、Sum、Count
- CREATE 創建
- 屬性
- 顯性屬性:開發者手動聲明的屬性
- 隱性屬性
- 沒有聲明,父類中也不存在,動態產生出來的
- 如果開發者主動聲明瞭這些屬性,隱性屬性自己就不再生成了
- 重要數據處理
- 邏輯字段
- is_delete
- 自定義Manager實現統一封裝:重寫get_queryset