教程總體簡介:項目概述 項目背景 項目的功能構架 項目的技術架構 CMS 什么是CMS CMS需求分析與工程搭建 靜態門戶工程搭建 SSI服務端包含技術 頁面預覽開發 4 添加“頁面預覽”鏈接 頁面發布 需求分析 技術方案 測試 環境搭建 數據字典 服務端 前端 數據模型 頁面原型 前端頁面 上傳圖片開發 前端開發 圖片查詢 靜態頁面測試 CMS頁面預覽測試 CMS添加頁面接口 搜索服務 搭建ES環境 后端工程搭建 導入CMS數據庫 MongoEngine入門 在Django中使用MongoDB 定義文檔 Logstash創建索引 創建搜索應用 定義ESClient 搜索前端技術需求 了解SEO 服務端渲染和客戶端渲染 Nuxt.js入門 創建Nuxt工程 頁面布局 路由 獲取數據 搜索頁面 查詢全部 分頁查詢 按分類搜索 按難度等級搜索 集成測試 在線學習與媒資管理 在線學習需求分析 需求描述 視頻點播解決方案 視頻編碼 FFmpeg的基本使用 生成m3u8/ts文件 播放器 搭建學習中心前端 媒資管理 開發環境 上傳文件 斷點續傳解決方案 文件分塊與合并 媒資服務端編寫 視頻處理 發送視頻處理消息 我的媒資 選擇視頻 保存視頻信息 Api接口 學習頁面獲取視頻播放地址 在線學習接口 登錄注冊與認證授權 增加數據 修改數據 刪除數據 查詢數據 Q對象 其他 查詢集 QuerySet 頁面管理后端開發 接口說明 接口開發規范 JWT Django REST framework JWT 用戶登錄前端 前端顯示當前用戶 用戶退出 前端集成認證授權 用戶注冊后端 訂單與選課 分布式事務 問題描述 CAP理論 解決方案 自動添加選課方案 Celery Beat定時任務 訂單服務定時發送消息 查詢前N條任務 樂觀鎖取任務 RabbitMQ配置 學習服務添加選課 訂單服務結束任務 傳智云課堂 封裝異常處理 封裝JSON返回值 站點列表和模板列表接口 新增頁面 頁面查詢接口定義 自定義條件查詢 3 測試接口 頁面詳情 修改頁面 刪除頁面 CMS前端工程創建 導入系統管理前端工程 單頁面應用介紹 CMS前端頁面查詢開發 創建頁面 Table組件測試 頁面內容完善 跨域問題解決 進入頁面立即查詢 前后端請求響應流程小結 新增頁面前端開發 頁面處理流程 頁面靜態化及預覽發布 頁面靜態化需求 模板管理 模板管理業務流程 模板制作 GridFS研究 模板存儲
完整筆記資料代碼:https://gitee.com/yinuo112/Backend/tree/master/Python/嘿馬云課堂web完整實戰項目/note.md
感興趣的小伙伴可以自取哦~
全套教程部分目錄:
部分文件圖片:
增加數據
學習目標
- 掌握增加數據的方法
1 增加數據
增加數據有兩種方法。
1、save
通過創建文檔類對象,執行對象的save()方法保存到數據庫中。
| |
2、create
通過模型類.objects.create()保存。
| |
2 小結
-
增加數據有兩種方法
-
通過創建文檔類對象,執行對象的save()方法
- 通過模型類.objects.create()保存
修改數據
學習目標
掌握修改數據的方法
1 修改數據
修改數據有兩種方法
1、save
修改模型類對象的屬性,然后執行save()方法
| |
2、update
使用模型類.objects.filter().update(),會返回受影響的行數
| |
2 小結
-
修改更新有兩種方法
-
修改模型類對象的屬性,然后執行save()方法
- 使用模型類.objects.filter().update()
刪除數據
學習目標
- 掌握刪除數據的方法
1 刪除數據
刪除有兩種方法
1、文檔類對象.delete()
| |
2、文檔類.objects.filter().delete()
| |
2 小結
-
刪除有兩種方法
-
文檔類對象.delete()
- 文檔類.objects.filter().delete()
查詢數據
學習目標
- 掌握基本查詢方法
- 掌握對結果集進行過濾的方法
1 基本查詢
get 查詢單一結果,如果不存在會拋出文檔類DoesNotExist異常。
all 查詢多個結果。
count 查詢結果數量。
| |
2 過濾查詢
要對結果集進行過濾,可使用如下方法:
- filter 過濾出多個結果
- exclude 排除掉符合條件剩下的結果
- get 過濾單一結果
- 直接在文檔類.objects()中傳入過濾條件
對于過濾條件的使用,上述幾個方法相同,故僅以filter進行講解。
過濾條件的表達語法如下:
| |
1、比較查詢
- ne 不等于(not equal to)
- gt 大于 (greater than)
- gte 大于等于 (greater than or equal to)
- lt 小于 (less than)
- lte 小于等于 (less than or equal to)
2、范圍查詢
- in 是否包含在范圍內。
- nin 是否不包含在范圍內。
| |
3、字符串查詢
- exact – 與指定值完全匹配
- contains – 包含指定值
- startswith – 以指定值開始
- endswith – 以指定值結束
| |
3 小結
-
基礎查詢
-
get 查詢單一結果
-
all 查詢多個結果
-
count 查詢結果數量
-
過濾查詢
-
過濾條件的表達語法:屬性名稱__比較運算符=值
- 比較查詢:ne、gt、gte、lt、lte
- 范圍查詢:in、nin
- 字符串查詢:exact、contains、startswith、endswith
Q對象
學習目標
- 掌握Q對象的使用方法
1 Q對象
多個過濾器逐個調用表示邏輯與關系。
例:查詢閱讀量大于20,并且評論量小于30的圖書。
| |
如果需要實現邏輯或or的查詢,需要使用Q()對象結合|運算符。
語法如下:
| |
例:查詢閱讀量大于20的圖書,改寫為Q對象如下。
| |
Q對象可以使用&、|連接,&表示邏輯與,|表示邏輯或。
例:查詢閱讀量大于20,或評論量小于30的圖書,只能使用Q對象實現
| |
MongoEngine中的Q對象前不可以使用~操作符。
2 小結
- 語法如下:Q(屬性名__運算符=值)
- Q對象可以使用&、|連接,&表示邏輯與,|表示邏輯或
其他
學習目標
- 掌握常用聚合函數的用法
- 掌握排序的用法
- 掌握關聯查詢的方法
1 聚合函數
常用的聚合函數有count 計數,sum 求和,average 求平均值
| |
2 排序
使用order_by對結果進行排序
| |
3 關聯查詢
1、由一到多的訪問語法:
需要進行兩步查詢,例如:
| |
主要是因為MongoDB不支持連表
| |
2、由多到一的訪問語法:
多對應的文檔類對象.一對應引用字段屬性名 例:
| |
3、訪問一對應的文檔類關聯對象的id語法:
多對應的文檔類對象.一對應引用字段屬性名.id
例:
| |
4 小結
-
常用的聚合函數
-
count 計數
- sum 求和
-
average 求平均值
-
使用order_by對結果進行排序.order_by('bread')是升序,.order_by('-bread')是降序
-
關聯查詢
-
由一到多的訪問語法:需要進行兩步查詢,MongoDB不支持連表查詢
- 由多到一的訪問語法:多對應的文檔類對象.一對應引用字段屬性名
- 訪問一對應的文檔類關聯對象的id語法:多對應的文檔類對象.一對應引用字段屬性名.id
查詢集 QuerySet
學習目標
- 了解查詢集的概念
- 熟悉查詢集的基本操作
1 概念
查詢集,也稱查詢結果集、QuerySet,表示從數據庫中獲取的對象集合。
當調用如下過濾器方法時,返回查詢集(而不是簡單的列表):
- all():返回所有數據。
- filter():返回滿足條件的數據。
- exclude():返回滿足條件之外的數據。
- order_by():對結果進行排序。
注:文檔類.objects也會返回包含所有數據的查詢集
對查詢集可以再次調用過濾器進行過濾,如
| |
也就意味著查詢集可以含有零個、一個或多個過濾器。過濾器基于所給的參數限制查詢的結果。
判斷某一個查詢集中是否有數據:
- 使用 len() 查看查詢集的長度是否為0
- 空的查詢集相當于 False,可直接用于條件判斷
2 限制查詢集
可以對查詢集進行取下標或切片操作,等同于sql中的limit和offset子句。
注意:不支持負數索引。
對查詢集進行切片后返回一個新的查詢集,不會立即執行查詢。
如果獲取一個對象,直接使用[0],等同于[0:1].get(),但是如果沒有數據,[0]引發IndexError異常,[0:1].get()如果沒有數據引發DoesNotExist異常。
示例:獲取第1、2項,運行查看。
| |
可以通過first()方法獲取查詢集中的第一個元素,如果查詢集為空,則返回None
| |
3 小結
- 查詢集表示從數據庫中獲取的對象集合
- all、filter、exclude、order_by等返回查詢集
- 可以對查詢集進行取下標或切片操作
- 可以通過first()方法獲取查詢集中的第一個元素
頁面管理后端開發
使用MongoEngine定義接口
學習目標
- 掌握使用MongoEngine定義接口的方法
前面我們了解了MongoEngine的基本使用方法,接下來我們看一下如何使用MongoEngine結合django-rest-framework-mongoengine實現接口的定義
1 定義序列化器
要使用MongoEngine文檔對象作為model,需要繼承rest_framework_mongoengine.serializers的DocumentSerializer來完成序列化器的定義
定義序列化器
booktest/serializer.py:
| |
2 定義視圖集
視圖集需要繼承rest_framework_mongoengine.viewsets中的類作為基類
定義視圖集
booktest/views.py:
| |
3 定義Router
使用MongoEngine文檔對象相關的模型和序列化器定義的視圖集,需要使用rest_framework_mongoengine.routers中的SimpleRouter或DefaultRouter來定義Router(兩個Router重寫了get_default_base_name方法)
定義urls
booktest/urls.py:
| |
注冊urls和應用
cz_study/urls.py:
| |
cz_study/settings.py:
| |
4 測試接口
啟動Django服務
| |
訪問地址 [ 可以看到所有圖書數據的列表,如下:
5 小結
-
使用MongoEngine定義接口的方法
-
定義序列化器:序列化器從rest_framework_mongoengine.serializers中繼承
- 定義視圖集:視圖集需要繼承rest_framework_mongoengine.viewsets中的類作為基類
- 定義router:需要使用rest_framework_mongoengine.routers中的SimpleRouter或DefaultRouter來定義Router(兩個Router重寫了get_default_base_name方法)
接口說明
接口開發規范
學習目標
- 了解項目的接口開發規范
1 接口開發規范
為了嚴格按照接口進行開發,提高效率,對請求及響應格式進行規范化。
1、get 請求時,使用querystring傳參。
2、Post請求時,可以提交form表單數據(application/x-www-form-urlencoded)和Json數據(Content-Type=application/json),文件等多部件類型(multipart/form-data)三種數據格式,也可以在querystring中附加過濾、排序等參數。
3、響應結果統一信息為:是否成功、操作代碼、提示信息及自定義數據。
4、響應結果統一格式為json。
參數 | 類型 | 是否必須 | 說明 |
---|---|---|---|
success | bool | 是 | 是否成功 |
code | int | 是 | 狀態碼 |
message | str | 是 | 狀態信息 |
data | 對象 | 是 | 數據對象 |
調用成功的返回值示例如下:
| |
調用失敗的返回值示例如下:
| |
為滿足這一需求,我們需要對接口返回進行定制:
- 調用失敗時,通過拋出異常返回錯誤信息
- 將所有JSON返回封裝成約定的格式