天天看點

day22 session登入

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>&lt;script src</code><code>=</code><code>"/static/plugin/jquery/jquery-1.8.0.js"</code><code>&gt;&lt;</code><code>/</code><code>script&gt;</code>

<code>    </code><code>&lt;script src</code><code>=</code><code>"/static/plugin/jquery/jquery.cookie.js"</code><code>&gt;&lt;</code><code>/</code><code>script&gt;</code>

<code>    </code><code>&lt;script </code><code>type</code><code>=</code><code>"text/javascript"</code><code>&gt;</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>) &amp;&amp; !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>&lt;</code><code>/</code><code>script&gt;</code>

<code></code>

本文轉自 295631788 51CTO部落格,原文連結:http://blog.51cto.com/hequan/1925359,如需轉載請自行聯系原作者

繼續閱讀