天天看点

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,如需转载请自行联系原作者

继续阅读