• django学习笔记(五)


    知识点概要

    - 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基本操作
    # 获取、设置、删除Session中数据
    request.session['k1']
    request.session.get('k1',None)
    request.session['k1'] = 123
    request.session.setdefault('k1',123) # 存在则不设置
    del request.session['k1']

    # 所有 键、值、键值对
    request.session.keys()
    request.session.values()
    request.session.items()
    request.session.iterkeys()
    request.session.itervalues()
    request.session.iteritems()


    # 用户session的随机字符串
    request.session.session_key

    # 将所有Session失效日期小于当前日期的数据删除
    request.session.clear_expired()

    # 检查 用户session的随机字符串 在数据库中是否
    request.session.exists("session_key")

    # 删除当前用户的所有Session数据 注销的时候用
    request.session.clear()
    request.session.delete("session_key")

    request.session.set_expiry(value)
    * 如果value是个整数,session会在些秒数后失效。
    * 如果value是个datatime或timedelta,session就会在这个时间后失效。
    * 如果value是0,用户关闭浏览器session就会失效。
    * 如果value是None,session会依赖全局session失效策略。

    - 配置文件中设置默认操作(通用配置):
    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,默认修改之后才保存(这是为True的话每次获取页面都会延时指定时候后使session过期)

    - 引擎的配置
    默认的为数据库的
    SESSION_ENGINE = 'django.contrib.sessions.backends.db' # 引擎(默认)
    缓存
    SESSION_ENGINE = 'django.contrib.sessions.backends.cache' # 引擎
    SESSION_CACHE_ALIAS = 'default' #
    CACHES = {
    'default': {
    'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
    'LOCATION': [
    '172.19.26.240:11211',
    '172.19.26.242:11211',
    ]
    }
    'db1': {
    'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
    'LOCATION': [
    '172.19.26.240:11211',
    '172.19.26.242:11211',
    ]
    }
    }
    使用的缓存别名(默认内存缓存,也可以是memcache),此处别名依赖缓存的设置
    文件session
    SESSION_ENGINE = 'django.contrib.sessions.backends.file' # 引擎
    SESSION_FILE_PATH = None # 缓存文件路径,如果为None,则使用tempfile模块获取一个临时地址tempfile.gettempdir()
    缓存加数据库
    SESSION_ENGINE = 'django.contrib.sessions.backends.cached_db' # 引擎
    加密cookie Session
    SESSION_ENGINE = 'django.contrib.sessions.backends.signed_cookies' # 引擎

    2. CSRF
    a. CSRF原理
    第一次获取页面的时候浏览器返回一个随机字符串,之后提交数据的时候需要把到这个字符串去提交,不然会报错
    返回的时候还会把这个字符串放到cookie里面,
    使用form提交时候:
    {% csrf_token %}
    b. 无CSRF时存在隐患

    c. Form提交(CSRF)

    d. Ajax提交(CSRF)
    CSRF请求头 X-CSRFToken
    e.个别页面需要csrf验证的解决方法
    django为用户实现防止跨站请求伪造的功能,通过中间件 django.middleware.csrf.CsrfViewMiddleware 来完成。而对于django中设置防跨站请求伪造功能有分为全局和局部。
    全局:
      中间件 django.middleware.csrf.CsrfViewMiddleware
    局部:
    @csrf_protect,为当前函数强制设置防跨站请求伪造功能,即便settings中没有设置全局中间件。
    @csrf_exempt,取消当前函数防跨站请求伪造功能,即便settings中设置了全局中间件。
    注:from django.views.decorators.csrf import csrf_exempt,csrf_protect
    ajax在setup里面加
    $.ajaxSetup({
    beforeSend: function(xhr, settings) {
    if (!csrfSafeMethod(settings.type) && !this.crossDomain) {
    xhr.setRequestHeader("X-CSRFToken", csrftoken);
    }
    }
    });

    6. 中间件

    7. 缓存
    5种配置
    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

  • 相关阅读:
    大规模机器学习
    机器学习之推荐系统
    SVM实现邮件分类
    机器学习之异常检测
    降维算法学习
    手写数字识别实现
    动态规划训练之十七
    概率期望训练之三
    数据结构训练之四
    绵阳东辰国际test201910.25
  • 原文地址:https://www.cnblogs.com/qiangayz/p/9005926.html
Copyright © 2020-2023  润新知