session  :
1. Session
基于Cookie做用户验证时:敏感信息不适合放在cookie中 a. Session原理
Cookie是保存在用户浏览器端的键值对
Session是保存在服务器端的键值对:
保存在数据库
使用session 前需要 执行
--Python manage.py makemigrations
--python manage.py migrate
保存在内存中的形式:
'随机字符串':{
'username': '....',
'loging': '....',
....
} 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() - 引擎配置
 CACHES = {
'default': {
'BACKEND': 'django.core.cache.backends.filebased.FileBasedCache',
'LOCATION': os.path.join(BASE_DIR,'cache')
}
}
SESSION_ENGINE = 'django.contrib.sessions.backends.db' # 引擎(默认)#保存在数据库中 SESSION_ENGINE = 'django.contrib.sessions.backends.cache' #在缓存中 SESSION_ENGINE = 'django.contrib.sessions.backends.file' #在文件中 SESSION_ENGINE = 'django.contrib.sessions.backends.cached_db' #缓存加数据库 SESSION_ENGINE = 'django.contrib.sessions.backends.signed_cookies' #加密cookies
   - 配置文件中设置默认操作(通用配置):
 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,默认修改之后才保存(默认)

    session 操作
1. 获取session中的值
request.session['key']  #获取不到会报错
request.session.get('key',None)#获取不到返回None
    2. 设置session中的值
 request.session['key']=123# 没有创建 有则替换
request.session.setdefault('key',123)#存在则不替换
删除:
 del request.session['key']
    3. 所有 键 值  键值对
        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的随机字符串 在数据库中是否存在
requset.session.exists('session_key')#request.session.get('key',None)#包含了
#删除 用户session的随机字符串 及对应的 键值
requset.session.delete('session_key')
request.session.clear()#注销使用
        #设置超时时间 :
request.session.set_expiry(value)
* 如果valus为整数 ,session会在秒数后失效
* 如果valus为datatime或timedelta ,session会在这个时间后失效
* 如果valus为0 ,session会在关闭浏览器后失效
* 如果valus为0 ,session会在关闭浏览器后失效
####################################   CSRF   #########################################
CSRF:
a. CSRF原理
{%csrf_token%}#前端生成一个随机字符串
--在表单中 和COOKIS 中都有存在 但不一样 django为用户实现防止跨站请求伪造的功能,
通过中间件 django.middleware.csrf.CsrfViewMiddleware 来完成。
而对于django中设置防跨站请求伪造功能有分为全局和局部。
全局
--在全局发送POST数据时,需要 csrf_token
局部
--@csrf_protect,为当前函数强制设置防跨站请求伪造功能,即便settings中没有设置全局中间件。
--@csrf_exempt,取消当前函数防跨站请求伪造功能,即便settings中设置了全局中间件。
注:from django.views.decorators.csrf import csrf_exempt,csrf_protect b. 无CSRF时存在隐患
c. Form提交 (CSRF)
<form>
{%csrf_token%}
</form>
d. Ajax提交 (CSRF)
CSRF请求头 X-CSRFToken (不能有下划线)
示例:
$(function(){
//
$.ajaxSetup({//当前所有ajax发送 全局
beforeSend: function(xhr,settings){//发送ajax前 先执行这个函数
xhr.setRequestHeader('X-CSRFtoken', $.cookie('csrftoken'));
}
}); $('#btn1').click(function () {
$.ajax({
url: '/login/',
type:"GET",
data: {'user': 'root', 'pwd': ''},
// headers: {'X-CSRFtoken': $.cookie('csrftoken')},
success:function(arg){ }
})
});
})
												

python第一百零九天---Django 4的更多相关文章

  1. python第一百零七天-- Django 基础 2

    1.Django请求的生命周期 路由系统 -> 试图函数(获取模板+数据=>渲染) -> 字符串返回给用户 2.路由系统 /index/ -> 函数或类.as_view() / ...

  2. python第一百零五天 ---Django 基础 路由系统 URL 模板语言 ORM 操作

    一 路由系统 URL 1 url(r'^index/',views.index) url(r'^home/', views.Home.as_view()) 2 url(r'^detail-(\d+). ...

  3. python第一百零二天-----第十七周作业

    由于内容众多 直接使用 git 链接 : https://github.com/uge3/hosts_masg 主机管理WEB页面 使用 SQLALchemy 主机管理(8列) ip 用户表: 用户名 ...

  4. “全栈2019”Java第一百零九章:匿名内部类实现唯一抽象类或接口

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...

  5. “全栈2019”Java第一百零七章:匿名内部类与构造方法注意事项

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...

  6. “全栈2019”Java第一百零六章:匿名内部类与抽象类接口注意事项

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...

  7. “全栈2019”Java第一百零五章:匿名内部类覆盖作用域成员详解

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...

  8. “全栈2019”Java第一百零四章:匿名内部类与外部成员互访详解

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...

  9. “全栈2019”Java第一百零三章:匿名内部类详解

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...

随机推荐

  1. win32程序之窗口程序,以及消息机制

    win32程序值窗口程序,以及消息机制 一丶简介 通过上一讲.我们了解了窗口其实是绘制出来的.而且是不断绘制的过程. 所以窗口的本质是绘制. 但是我们现在看到的窗口程序.都可以点击关闭按钮. 使用鼠标 ...

  2. 通过修改hosts解决gist.github.com无法访问的问题

    1.打开mac终端先ping一下 ping 192.30.253.119 如果能ping通的话 ,说明可以访问 2.修改hosts文件,添加如下语句: 192.30.253.118 gist.gith ...

  3. 浅析JavaScript之数组

    一  概述 JavaScript数组同后端语言一样,具有它自己的数据结构,归根结底,这种数据结构,本质就是一种集合. 在后端语言中(如java,.net等),数组是这样定义的:数组是用来存储相同数据类 ...

  4. Go语言学习笔记(四) [array、slice、map]

    日期:2014年7月22日   一.array[数组]   1.定义:array 由 [n]<type> 定义,n 标示 array 的长度,而 <type> 标示希望存储的内 ...

  5. 伪指令 ADR 与 LDR 的区别

    指令简介: adr r0, _start 得到的是 _start 的当前执行位置,由 pc+offset 决定 ldr r0, =_start 得到的是绝对的地址,链接时决定 程序示例: ldr r0 ...

  6. C# 7.1中default关键字的新用法

    default 关键字有两类用法 switch语句中指定默认标签 默认值表达式 switch 语句 int caseSwitch = 1; switch (caseSwitch) { case 1: ...

  7. [转]Angular引入第三方库

    本文转自: https://blog.csdn.net/yuzhiqiang_1993/article/details/71215232 版权声明:本文为博主原创文章,转载请注明地址.如果文中有什么纰 ...

  8. MySQL技巧(一)

    NOT IN 与 IN 假设我们又一张score表如下 我们需要查询所有不是性别代号为"0"的学生数据 ); 很明显,not in 就是排除的意思. exists 与 not ex ...

  9. Linux 系统的安装 (最全收集)

    在几年前,我曾经多次萌生抛弃Win系统,从而使用Linux系统-----(Ubuntu),但是我每次都会遇到同一个问题,TM怎么安装啊. 不是安装奇慢就是不知道安装的方法. 怎样安装Ubuntu操作系 ...

  10. linux下ftp服务器搭建

    1.yum install vsftpd  使用yum安装ftp 2.创建并授权ftp文件目录   mkdir -P /ftp/ftpadmin       chmod -R 777 /ftp/ftp ...