day22
知識點概要
- Session
- CSRF
- Model操作
- Form驗證(ModelForm)
- 中間件
- 緩存
- 信号
内容詳細:
1. Session
基于Cookie做使用者驗證時:敏感資訊不适合放在cookie中
a. Session原理
Cookie是儲存在使用者浏覽器端的鍵值對
Session是儲存在伺服器端的鍵值對
b. Cookie和Session對比
c. Session配置(缺少cache)
d. 示例:實作兩周自動登陸
- request.session.set_expiry(60*10)
- SESSION_SAVE_EVERY_REQUEST = True
PS: cookie中不設定逾時時間,則表示關閉浏覽器自動清除
- session依賴于cookie
- 伺服器session
request.session.get()
request.session[x] = x
request.session.clear()
- 配置檔案中設定預設操作(通用配置):
SESSION_COOKIE_NAME = "sessionid" # Session的cookie儲存在浏覽器上時的key,即:sessionid=随機字元串(預設)
SESSION_COOKIE_PATH = "/" # Session的cookie儲存的路徑(預設)
SESSION_COOKIE_DOMAIN = None # Session的cookie儲存的域名(預設)
SESSION_COOKIE_SECURE = False # 是否Https傳輸cookie(預設)
SESSION_COOKIE_HTTPONLY = True # 是否Session的cookie隻支援http傳輸(預設)
SESSION_COOKIE_AGE = 1209600 # Session的cookie失效日期(2周)(預設)
SESSION_EXPIRE_AT_BROWSER_CLOSE = False # 是否關閉浏覽器使得Session過期(預設)
# set_cookie('k',123)
SESSION_SAVE_EVERY_REQUEST = False # 是否每次請求都儲存Session,預設修改之後才儲存(預設)
- 引擎的配置
2. CSRF
a. CSRF原理
b. 無CSRF時存在隐患
c. Form送出(CSRF)
{% csrf_token %}
d. Ajax送出(CSRF)
CSRF請求頭 X-CSRFToken
from django.views.decorators.csrf import csrf_exempt,csrf_protect
6. 中間件
7. 緩存
5種配置
CACHES = {
'default': {
'BACKEND': 'django.core.cache.backends.locmem.LocMemCache',
'LOCATION': 'unique-snowflake',
'TIMEOUT': 300,
'OPTIONS':{
'MAX_ENTRIES': 300,
'CULL_FREQUENCY': 3,
},
}
}
3種應用:
全局
視圖函數
模闆
8. 信号
- 内置信号
- 自定義
- 定義信号
- 出發信号
- 信号中注冊函數
3. Model操作
a. 字段類型 + 參數
b. 連表字段 + 參數
c. Meta
d. SQL操作:
- 基本增删改查
- 進階操作
- 正反查詢
- 其他操作
e. 驗證(弱)
4. Form操作
完成:
- 驗證使用者請求
- 生成HTML
(保留上一次送出的資料)
自定義:
- 類
- 字段(校驗)
- 插件(生成HTML)
初始化操作:
============= 作業:xxxoo管理 =============
使用者驗證:session
新URL:Form驗證
中間件:IP過濾
信号:記錄操作
CSRF:
a. Form驗證使用者請求
b. Form生成HTML
c. Form字段詳細(自定義字段,Model...) + 插件
d. 自定義驗證(鈎子以及__all__)
e. 注冊示例:
使用者名、密碼、郵箱、手機号(RegexValidator或RegexField)、性别、愛好、城市
f. 初始化值
5. ModelForm
a. Model+Form功能集合
b. save
c. save + save_m2m
jquery.cookie.js
所有的AJAX請求
<code> </code><code><script src</code><code>=</code><code>"/static/plugin/jquery/jquery-1.8.0.js"</code><code>><</code><code>/</code><code>script></code>
<code> </code><code><script src</code><code>=</code><code>"/static/plugin/jquery/jquery.cookie.js"</code><code>><</code><code>/</code><code>script></code>
<code> </code><code><script </code><code>type</code><code>=</code><code>"text/javascript"</code><code>></code>
<code> </code><code>var csrftoken </code><code>=</code> <code>$.cookie(</code><code>'csrftoken'</code><code>);</code>
<code> </code>
<code> </code><code>function csrfSafeMethod(method) {</code>
<code> </code><code>/</code><code>/</code> <code>these HTTP methods do </code><code>not</code> <code>require CSRF protection</code>
<code> </code><code>return</code> <code>(</code><code>/</code><code>^(GET|HEAD|OPTIONS|TRACE)$</code><code>/</code><code>.test(method));</code>
<code> </code><code>}</code>
<code> </code><code>$.ajaxSetup({</code>
<code> </code><code>beforeSend: function(xhr, settings) {</code>
<code> </code><code>if</code> <code>(!csrfSafeMethod(settings.</code><code>type</code><code>) && !this.crossDomain) {</code>
<code> </code><code>xhr.setRequestHeader(</code><code>"X-CSRFToken"</code><code>, csrftoken);</code>
<code> </code><code>}</code>
<code> </code><code>}</code>
<code> </code><code>});</code>
<code> </code><code>function Do(){</code>
<code> </code><code>$.ajax({</code>
<code> </code><code>url:</code><code>"/app01/test/"</code><code>,</code>
<code> </code><code>data:{</code><code>id</code><code>:</code><code>1</code><code>},</code>
<code> </code><code>type</code><code>:</code><code>'POST'</code><code>,</code>
<code> </code><code>success:function(data){</code>
<code> </code><code>console.log(data);</code>
<code> </code><code>});</code>
<code> </code><code><</code><code>/</code><code>script></code>
<code></code>
本文轉自 295631788 51CTO部落格,原文連結:http://blog.51cto.com/hequan/1925359,如需轉載請自行聯系原作者