1. 程式人生 > >Django驗證——內建模組

Django驗證——內建模組

在瞭解Django內建模組之前呢我們先簡單的瞭解一下什麼是Django:

django就是遵循MVC設計的,它有一個專有名詞:MVT

      M的全拼為Model,負責處理資料,內嵌了ORM框架
      V的全拼為View,負責接收HttpRequest,業務處理,返回HttpResponse
      T的全拼為Template,負責封裝構造要返回的html,內嵌了模板引擎

Model模組:
ORM:django和資料庫進行資料互動重要框架,它讓我們不用再需要面向資料庫編寫程式碼
一,定義模型類:
1.1模型類必須繼承自Model類,建立模型類就是在資料庫中建立資料表,django會自動為表建立一個主鍵列,
     如果自己設定某些屬性為主鍵後django不會再建立主鍵,預設主鍵屬性為id,可以用pk代替
1.2屬性命名限制,不能使python的關鍵字,不能使用連續的下劃線,這是django的查詢方式
      定義屬性需要制定欄位型別,
  格式屬性=models.欄位型別(選項)
常用欄位型別:字串CharField(max_length=字元長度), 整數 IntegerField ,自動增長 AutoField , 
日期DateField(auto_now=False,auto_now_add=False),前者是每次儲存物件時列印當前時間
後者是顯示第一次建立的時間,顯示時間戳,二者只能選其一
1.3關係欄位型別:一對多: ForeignKey, 多對多:ManyToManyField ,一對一:OneToOneField
1.4 可以設定元選項更改資料庫的表名,在模型類中定義Meta類,直接寫db_table= '指定表名'

2模型的例項方法
2.1 save()將物件儲存到資料庫表中
2.2 delete()將物件從資料庫表中刪除

3 查詢集
3.1 表示從資料庫獲取的物件集合,它有兩大特性:惰性執行,建立的時候不會執行,呼叫資料才會執行
快取,查詢集的結果被儲存下來,再次查詢使用快取資料
3.2返回的集合可以使用過濾器:
(1)all()返回所有資料
(2)filter(條件) 返回滿足條件的資料
(3)exclude():返回滿足條件之外的資料
(4)order_by(): 排序
(5)get():返回滿足條件的物件
(6)count():返回當前查詢的總條數
(7)exists():判斷查詢集中是否有資料,如果有返回True,否則返回False


4 欄位查詢:實現sql中where功能
4.1運算子號 
(1)exact:表示判等
(2)contains: 表示包含
(3)startswith, endswith:以指定值開頭或結尾
(4)isnull:是否為Null
(5)year...日期型別的屬性


list=BookInfo.books.filter(id__exact=1)
可簡寫為:
list=BookInfo.books.filter(id=1)

View模組
1 因為它是負責接收HttpRequest物件,所以要對客戶端傳送過來的url進行正則匹配,
讓相應的函式進行資訊處理

2 檢視就是在View中定義的函式 試圖函式的引數必須包含HttpRequest例項,必須返回一個HttpResponse物件

3 常見響應錯誤 
  3.1 404錯誤 錯誤的地址
3.2 500錯誤 伺服器出錯
3.3 400錯誤 語法錯誤

 4 HttpRequest物件 django在接收到http協議後會自己建立一個request物件
4.1request呼叫一下方法檢視屬性
(1)path :一個字串,請求頁面的完整路徑
(2)method:字串,請求使用的方法,通常為get或者post
(3)GET:get請求方式的所有引數
(4)POST:post請求方式的所有引數
(5)COOKIES: 所有的cook資訊
(6)session: url攜帶的session資訊

5HttpResponse物件 試圖接受請求處理完之後必須返回一個HttpReponse物件或者它的子物件
5.1一般情況下直接返回它的子物件,render
render(request物件,模板,返回的資料)
5.2 如果瀏覽器發起ajax請求時,伺服器就需要返回json資料

瀏覽器傳送請求-->url匹配返回模板-->渲染模板,載入jquery檔案繫結點選事件-->

-->點選按鈕使用get傳送ajax請求-->view匹配url,處裡請求返回資料-->客戶端使用get的回掉函式填充資料

6 重定向

6.1 完成一項操作後條狀頁面,這裡的跳轉是伺服器完成的跳轉,不需要使用者操作

6.2 django提供了HttpResponseRedirect物件來實現重定向功能,狀態碼是302

6.3 django也提供了簡寫函式 redirect,在django.shortcuts模組中 

7 狀態保持  

7.1 瀏覽器請求伺服器是無狀態的,無法知道使用者之前做過什麼,有時需要使用者的瀏覽狀態,比如是否登陸

7.2 實現狀態保持有兩種方式:在客戶端使用cookie  在伺服器端使用session

7.3 cookie

(1)cookie 會記錄使用者的基本資訊,瀏覽器會把它儲存到某一個目錄下

(2) 下次使用者傳送請求時會帶上cookie資訊,伺服器會根據cookie識別使用者是否合法以及是否需要重新登入

(3)cookie以鍵值對的格式進行資訊的儲存

(4)常用cookie推送廣告,記住使用者名稱,購物網站的購物車

7.4 session

(1) session是把儲存敏感資料,重要資訊儲存在伺服器端

(2) 它依賴於cookie,伺服器儲存session資料時cookie必須儲存一個session的資訊 

(3)儲存session時,session的id必須與cookie中的sessionid相同

(4)設定過期時間 set_expiry(value)這是個方法,直接呼叫,value為None表示django自帶的最大時間,

如果為0表示瀏覽器關閉就過期


Template模板

1 模板實現了邏輯處理view和現實內容的template的分離,一個試圖可以呼叫任意模板,一個模板可供多個view使用

2 模板包含兩個部分:靜態部分,包含html。css 。js。。 動態部分 模板語言

2.1 模板語言 簡寫DTL

(1)變數:{{變數}}

(2)標籤:{%程式碼段%}

(3)過濾器:變數|過濾器:引數

(4)註釋:{#...#}

3 模板繼承,主要應用網站頭部,尾部資訊

3.1父模版

{%block 名稱%}

預留區域,可以編寫預設內容,也可以沒有預設內容

{%endblock 名稱%}

3.2 子模板 繼承父模板

第一行{% extends  父模板名稱%}

填充父模板預留的區域

{%block 名稱%}

實際填充內容

{{block.super}} 用來呼叫復模版中的內容

{%endblock 名稱%}

4 html轉義,瀏覽器會對html標籤自動轉義,類似論壇裡面使用者輸入的html這時候就不能轉義

4.1關閉轉義

(1){{不用轉義的變數名|safe}}

(2)設定一段程式碼都禁用轉義

{%aurosescape off%}

。。。。

{%endautoescape%}

5 反向解析:設定url的時候定義一個“name=”在設定主url的時候定義一個名稱空間

主要url:

格式return redirect(reverse('booktest:fan', kwargs={'id':100,'age':18}))
    view視圖裡面的url
         反向解析格式的重定向
renturn redirect(reverse(‘users:register’))