python第一百零九天---Django 4
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的更多相关文章
- python第一百零七天-- Django 基础 2
1.Django请求的生命周期 路由系统 -> 试图函数(获取模板+数据=>渲染) -> 字符串返回给用户 2.路由系统 /index/ -> 函数或类.as_view() / ...
- python第一百零五天 ---Django 基础 路由系统 URL 模板语言 ORM 操作
一 路由系统 URL 1 url(r'^index/',views.index) url(r'^home/', views.Home.as_view()) 2 url(r'^detail-(\d+). ...
- python第一百零二天-----第十七周作业
由于内容众多 直接使用 git 链接 : https://github.com/uge3/hosts_masg 主机管理WEB页面 使用 SQLALchemy 主机管理(8列) ip 用户表: 用户名 ...
- “全栈2019”Java第一百零九章:匿名内部类实现唯一抽象类或接口
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...
- “全栈2019”Java第一百零七章:匿名内部类与构造方法注意事项
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...
- “全栈2019”Java第一百零六章:匿名内部类与抽象类接口注意事项
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...
- “全栈2019”Java第一百零五章:匿名内部类覆盖作用域成员详解
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...
- “全栈2019”Java第一百零四章:匿名内部类与外部成员互访详解
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...
- “全栈2019”Java第一百零三章:匿名内部类详解
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...
随机推荐
- CSS实例详解:Flex布局
本文由云+社区发表 本文将通过三个简单的实例,实际应用上篇文章的基础理论知识,展示下Flex布局是如何解决CSS布局问题. 一.垂直居中 这里同时用非flex布局和flex布局两种方式来实现,可以对比 ...
- apache用户认证访问机制(转)
Apache服务器已经内置用户验证机制,大家只要适当的加以设置,便可以控制网站的某些部分要用户验证.前期准备,必须已经安装apache,如果还没安装,或者对安装很模糊的话,第1步:我们在/var/ww ...
- SpringCloud(1) 架构演进和基础知识简介
一.传统架构演进到分布式架构 简介:讲解单机应用和分布式应用架构演进基础知识 (画图) 高可用 LVS+keepalive 1.单体应用:开发速度慢.启动时间长.依赖庞大.等等 2.微服务:易开发.理 ...
- MySQL中间件之ProxySQL(2):初试读写分离
返回ProxySQL系列文章:http://www.cnblogs.com/f-ck-need-u/p/7586194.html 1.实现一个简单的读写分离 这里通过一个简单的示例实现ProxySQL ...
- SpringBoot之Swagger2的使用
Swagger是一组围绕OpenAPI规范构建的开源工具,可帮助设计.构建.记录和使用REST API.简单说下,它的出现就是为了方便进行测试后台的restful形式的接口,实现动态的更新,当我们在后 ...
- YARN集群的mapreduce测试(三)
将user表.group表.order表关:(类似于多表关联查询) 测试准备: 首先同步时间,然后 开启hdfs集群,开启yarn集群:在本地"/home/hadoop/test/" ...
- 【转载】 Sqlserver中DateAdd()函数
在Sqlserver数据库中,DATEADD() 函数在日期中添加或减去指定的时间间隔.例如计算当前时间往后一天的时刻以及往前1天的时刻时间即可使用DateAdd()函数来操作,DateAdd()函数 ...
- EF 传递的主键值的数量必须与实体上定义的主键值的数量匹配 原因
主要是该数据表没有定义主键造成的
- Mysql索引的类型
索引的类型 B-Tree索引 B-Tree 索引 通常意味着所有的值都是按顺序存储的,并且每一个叶子页到根的距离相同. B-Tree 索引 能够加快访问数据的速度,存储引擎不再需要进行全表扫描来获取需 ...
- JavaScript是如何工作: 深入探索WebSocket和HTTP/2与SSE + 如何选择正确的路径!
原文:<JavaScript是如何工作: 深入探索 websocket 和HTTP/2与SSE +如何选择正确的路径! 作者:前端小智 Fundebug经授权转载,版权归原作者所有. 文章底部分 ...