主要內容:
1: 裝飾器函數
a: 原理: 在不改變原函數的代碼和調用方式的情況下, 給函數動態的添加功能
b: 實例:
裝飾器的原理:
def yue(tools):print('使用%s約一約' % tools)
def wrapper(fn):def inner(*args, **kwargs):print('先準備好錢')fn(*args, **kwargs)return inner
yue = wrapper(yue)
yue('momo') # 實際執行inner函數 , 給inner函數傳參數, 要給inner函數設置形參, 即普遍協程萬能參數的形式,
裝飾器函數形式
def wrapper(fn):def inner(*args, **kwargs):print('先準備好錢')ret = fn(*args, **kwargs) # 如果函數有返回值用ret接, 再返回.return retreturn inner
@wrapper # 相當于執行yue = wrapper(yue)
def yue(tools):print('使用%s約一約' % tools)return '準備好了'
print(yue('momo'))
2 母版繼承
a : 作用: 可以減少代碼量, 優化代碼, 提高代碼的復用性 類似于函數中的繼承. (把相同的代碼段提取出來, 不同的地方作為補充)
b :?{% extends '被繼承的.html文件' %}
{% block contenter %}{% endblock %}
c : 實例
母版文件
<!DOCTYPE html>
<html lang="en">
<head> <meta charset="UTF-8"> <title>Document</title>
</head>
<body> <!-- 需要母版進行替換的.html文件 --> {% block page-main %} {% endblock %}
</body>
</html>
繼承母版文件的.html
<!-- 繼承母版文件.html -->
{% extends "被繼承.html文件路徑" %}{% block page-main %} <!-- page-main 是要被替換的塊名,可以更改 -->內容{% endblock %}
在 views.py 中配置
3 csrf:??(Cross-site request forgery)跨網站請求偽造
詳細介紹:https://www.cnblogs.com/freely/p/6928822.html
a : 原理如下圖
從上圖可以看出, 要完成一次的csrf攻擊, 受害者必須完成兩個步驟:
1. 登錄受信任網站a, 并在本地生成cookie.
2. 在不退出a的情況, 訪問危險網站b.
注意: 并不是退出a后再登錄b就沒事, 應為不能保證你關閉了瀏覽器后, 你本地的cookie就會過期, 你上次的會話已經結束
b : crsf 防御機制
1? 可以從服務端和客戶端兩方面著手, 防御效果從服務端著手較好, 現在一般的csrf防御也在服務端進行.
2? ?Django下的csrf防御機制:Django第一次響應來自某個客戶端的請求時, 會在服務端隨機生成一個token, 把這個token放在cookie里, 然后每次post請求都會帶上這個token這樣就可以避免csrf攻擊.
在 templete 中, 為每個 POST form 增加一個 {% csrf_token %} tag. 如下:?
1在返回的 HTTP 響應的 cookie 里,django 會為你添加一個 csrftoken 字段,其值為一個自動生成的 token,在檢查下的network中查看.
2在所有的 POST 表單模板中,加一個{% csrf_token %} 標簽,它的功能其實是給form增加一個隱藏的input標簽,如下
<input?type="hidden"?name="csrfmiddlewaretoken"?value="{{ csrf_token }}">,而這個csrf_token = cookie.csrftoken,在渲染模板時context中有 context['csrf_token'] = request.COOKIES['csrftoken']
3在通過表單發送POST到服務器時,表單中包含了上面隱藏了crsrmiddlewaretoken這個input項,服務端收到后,django 會驗證這個請求的 cookie 里的 csrftoken 字段的值和提交的表單里的 csrfmiddlewaretoken 字段的值是否一樣。如果一樣,則表明這是一個合法的請求,否則,這個請求可能是來自于別人的 csrf 攻擊,返回 403 Forbidden.
4在通過 ajax 發送POST請求到服務器時,要求增加一個x-csrftoken header,其值為 cookie 里的 csrftoken 的值,服務湍收到后,django會驗證這個請求的cookie里的csrftoken字段與ajax post消息頭中的x-csrftoken header是否相同,如果相同,則表明是一個合法的請求
4? cookie(儲存在用戶本地終端上的數據)
定義:在 Internet 中,Cookie 實際上是指小量信息,是由 Web 服務器創建的,將信息存儲在用戶計算機上的文件。一般網絡用戶習慣用其復數形式 Cookies,指某些網站為了辨別用戶身份、進行 Session 跟蹤而存儲在用戶本地終端上的數據,而這些數據通常會經過加密處理
目的:?為了讓用戶在訪問某網站時,進一步提高訪問速度,同時也為了進一步實現個人化網絡,發明了今天廣泛使用的 Cookiee.
?
?
?
?