配置好mysql數據庫的鏈接html
第二步就是需求分析和app的設計:前端
大體上分爲 四個app(也就是四個模塊,Django是按app來開發的)python
而後新建完app並調整好結構,靜態文件的文件夾static,html頁面的文件夾templates,媒體文件文件夾media等mysql
由於系統自帶的User表字段沒有須要的字段因此本身新建覆蓋了一張用戶表來存儲用戶信息git
django提供一種方式讓咱們能夠重載它的類github
繼承AbstractUserajax
在模型文件裏設計好以後,須要在全局文件裏設置redis
運行makemigrations和migrate 生成遷移文件和表 sql
還有coures相關的表:課程表、章節、視頻、課程資源 四個表數據庫
organizations:城市表、課程機構表、講師表
operations:用戶諮詢表、課程評論表、用戶收藏表、用戶信息表、用戶課程表
代碼太多就不詳細貼上去了
在設計過程種使用了分層設計 避免循環導入不一樣app中的model
配置好相關的path 路徑
而後用xadmin來搭建後臺管理系統:在github上搜索xadmin下載
而後配置好urls.py的路徑
使用xadmin 能夠本身識別用戶本身定義的表
而後在以前新建好的每一個app裏 新建adminx.py文件 配置後臺 例如:course app
這裏包括了列表、過濾 、搜索、編輯框的功能 list_display 爲列表 search-fields 搜索列 list_filter 過濾 list_editable 編輯框
在作登陸以前須要配置好首頁和登陸頁面
而後編寫邏輯函數 在views.py文件
使用的是CBV的邏輯來開發
CBV-class base view(優勢:
class是能夠繼承的 爲了後期便於維護有利於代碼重用
)
由於是登陸因此和用戶相關是在users這個app裏的views裏編寫
這裏的代碼邏輯 所有備註好了: 登錄頁面有兩種請求 一種是提交的post 一種是get
而後下面就是邏輯判斷 ,判斷用戶是否存在 存在就登錄,用django 內部的login方法
不然就返回錯誤信息,並返回表單驗證的錯誤信息
這是前端頁面的判斷邏輯,
這裏的判斷邏輯是:若是在表單驗證中發現用戶名或者密碼錯誤:將前端樣式的輸入框變成紅色
登錄開發完了以後:就是開發退出登錄的藉口
編寫的View函數都是繼承django 自己自帶的view
編寫一個LogoutView(View)
而後再urls.py中修改一下配置
而後就是在html頁面配置退出的url
這裏的url 都是這樣的書寫格式 和前面的path 的name屬性 一直 它會自動識別出路徑 並且方便後期維護,只須要改動path的url路徑名
首先爲了可以發送手機驗證碼,須要找有發送手機短信資質的運營商 ,這裏使用的是雲片網 (具體如何註冊使用就不說明了)
在雲片網:www.yunpian.com
此時準備完以後就須要在pycharm中編寫代碼了:
在apps文件夾下新建一個目錄爲utils 專門存放這種工具類文件
查看API文檔有步驟說明
咱們短信驗證只須要用到單條短信發送 進入相關的文檔說明裏
這是相關的參數,只需選擇3個必傳參數便可 其餘參數看需求
apikey 在控制檯裏
apikey 最好在項目的全局設置裏配置好 方便後期更改
短信發送須要用到request
這裏的if __name__== "__main__"
用來測試的
這裏的url 爲文檔說明中的url, text 爲雲片網審覈經過的模板樣式
有了url 和text 以後就是發送數據了:
經過request的post方法 一個參數爲url 一個參數爲data data爲dict形式
dict裏面的值爲文檔裏面要傳的參數
這樣就算完成了,可是還須要用ajax的方式來完成短信驗證碼的發送用到了js的知識
這裏return不用rander 而是用JsonResponse 由於這裏是用ajax 異步發送短信此時,上面提到的403錯誤不能再用
由於本來用form表單提交的方式只須要在form標籤 里加入{% csrf_token %}便可 瀏覽器會幫咱們直接表單裏的全部值
可是咱們使用ajax異步的方式來進行方式 這樣瀏覽器就不會幫咱們提交上去
全部使用{% csrf_token %} 並無用
此時就用到csrf_exempt() 讓服務器不驗證csrf
此時思考一下 若是在js文件裏面 添加csrf_token 獲取這個值是否能夠???可是在html頁面點擊查看源碼能夠看出值並無賦值進來 因此這個方法行不通
這裏還牽涉到了redis來記錄發送的數據
經過雲片網發送驗證碼以後 這個驗證碼咱們得保存起來 進行驗證
因此保存數據:第一種 就是保存在數據庫 另外一種就是保存在內存中
用存在內存的方式 有兩個問題:
1. 重啓django以後,變量不存在了
2.隨着驗證碼愈來愈多,,內存佔用愈來愈大,驗證碼過時處理
用數據庫能夠實現 可是有特殊狀況 發送完驗證碼以後用戶並無進行後續操做 這樣數據就會愈來愈多
此時用 redis k-v數據庫
(redis要運行起來 redis-server.exe redis-cli.exe)
import redis
把redis的對象取出來賦給r,而後r.set 模式來持久化
同時驗證碼還須要一個驗證邏輯,咱們使用表單來驗證 這個驗證碼和發送的驗證碼是否一致
把redis對象取出來以後查詢它的code值 和 表單提交的code 進行比較 若是不相等拋出異常
這裏的拋出異常咱們用 raise
若是正確就返回這個code
:
還須要動態驗證碼:
在github上搜索 django-captcha-simple 裏面有安裝和配置步驟
而後文檔會告訴如何使用,按照步驟咱們建立一個表單
有了這個表單以後在views.py裏面咱們把表單裏的傳遞過去 ,並顯示到前段頁面
這裏的兩個只會顯示其中一個不會衝突
這樣動態驗證碼就實現了
接下來就是配置前段的html的url 和邏輯判斷
全部的配置完了以後不要忘記配置urls.py文件的路徑
動態登錄的邏輯完了以後須要實現動態註冊的功能:
註冊頁面也有兩個請求 1個是get 1個post ,get 請求須要獲取到註冊頁面的動態驗證碼
post 請求是要把前段提交的數據存儲,可是有兩個判斷邏輯,第一個是用戶沒有註冊,這個比較簡單把用戶提交的數據存儲到數據庫裏面, 第二個邏輯是用戶已經註冊過了,此時須要用到表單驗證,專門驗證mobile這個字段時候存在
而後注意前段頁面的配置:
form表單的方法要是post方法 action屬性值爲{% url 'register'%}這種形式
input標籤的name屬性的值要和view函數裏一一對應 而且注意403錯誤 在表單里加入 {%csrf_token%}
而後就是錯誤信息判斷完的顯示,和以前在作登錄的時候同樣