Django学习手册 - cookie / session
cookie
"""
cookie属性:
obj.set_cookie(key,value,....)
obj.set_signed_cookie(key,value,salt="加密盐",....)
参数:
key 键
value=“” 值
max_age=None 超时时间
expires=None 超时日期
path="/" cookit生效的路径,/表示根路径,特殊的,跟路径的cookie可以被任何url被任何url的页面访问
domain=None cookie生效的域名
secure=False https传输
httponly=False 只能http协议传输,无法javascript获取(不是绝对,底层抓包可以获取到) 获取cookie
request.COOKIES
request.COOKIES['username']
request.COOKIES.get("username") 设置cookie
response = render(request,'index.html')
response = redirect("/index/")
response = set_cookie("key","value")
return response 加盐配置:
obj = HttpResponse("S")
获取加盐cookie
obj.set_signed_cookie("username","passwd",salt="jiayan")
设置加盐cookie
obj.get_signed_cookie("username",salt="jiayan")
获取与设置的加盐 一定要是相同的加盐字符 """
前端:(login 页面)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<div>
<form action="/login/" method="post">
<p>
<span>用户名:</span> <input type="text" name="user">
<span>密码:</span><input type="password" name="pwd">
<input type="submit" value="提交">
</p>
</form>
</div>
</body>
</html>
前端:(index页面)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h1>
欢迎登录......... </h1>
</body>
</html>
URL:
from django.contrib import admin
from django.urls import path
from django.conf.urls import url
from app01 import views urlpatterns = [
path('admin/', admin.site.urls),
url('^login/', views.login),
url('^index/', views.index),
]
后端:
from django.shortcuts import render,HttpResponse,redirect # Create your views here. def login(request):
print(request.COOKIES)
print(request.session)
if request.method == "POST":
u = request.POST.get("user",None)
p= request.POST.get("pwd",None)
if u == "root" and p == "":
# cookie的方式:
# ret = redirect("/index/")
# #设置cookie数值
# ret.set_cookie("name","123",10)
# return ret #session方式
request.session["info_login"]=True
request.session["user"] = u
return redirect("/index/") else:
redirect("/login/")
return render(request,"login.html") def index(request):
#cookie
# if request.COOKIES.get("name",None):
# print("index")
# return render(request,"index.html") #session
if request.session.get("info_login",None):
name = request.session.get("user")
return render(request,"index.html")
#session 默认存放在数据库中。 else:
return redirect("/login/")
--------------------------------------------------------------------------------------------------------------------------------------------------------
装饰器的方式:
from django.shortcuts import render,redirect,HttpResponse # Create your views here. def aut(fum):
def log(request,*args,**kwargs):
if request.COOKIES.get("user",None):
return fum(request,*args,**kwargs)
else:
return redirect("/login/")
return log def login(request):
if request.method == "POST":
u = request.POST.get("user", None)
p = request.POST.get("pwd", None)
if u == "root" and p == "":
ret = redirect("/index/")
# ret.set_cookie("user", u)
ret.set_signed_cookie("user",u,salt="abcd") return ret
else:
return redirect("/login/")
return render(request,"login.html") @aut
def index(request):
return HttpResponse("OK")
核心 session
1.session 依赖cookie
2.Session流程
3.Session操作
4.Session配置
5.Session存储
注意!!!
django 默认数据存储在数据表格中的,所以在配置好之前一定要创建数据表格!!!
python manage.py makemigrations
python manage.py migrate
#生成随机字符串
#写到用户浏览器cookie
#保存到session中
#在随机字符串对应的字典中设置相关内容
Request.session[‘user’] = user
Request.session[‘is_login’] = True
Return redirect(“/index/”) #Session 获取数据
Request.session[‘k1’]
Request.session.get(“k1”,None) #设置数据
Request.session[‘k1’] = 123
Request.session.setdefault(“k1”,123)
#存在则不设置 #删除数据
Del request.session[‘k1’]
Request.session.clear()
Request.session.delete(‘session_key’
) #所有键值,键值对
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.delete(“session_key”) Request.session.set_expiry(value)
*如果value是个整数,session会在些秒数后失效。
*如果是value是个datatime或timedelta,session就会在这个时间后失效
*如果value是0,用户关闭浏览器session就会失效。
*如果value是None,session会依赖全局session失效策略 #在setting里面设置
SESSION_COOKIE_NAME = “sessionid”
#session 的cookie保存在浏览器上时的key,即:sessionid=随机字符串(默认) SESSION_COOKIE_PATH = ‘/’
#session 的cookie 保存的路径(默认) SESSION_COOKIE_DOMAIN=None
#session 的cookie 保存的域名(默认) SESSION_COOKIE_SECURE=False
#是否HTTP传输cookie SESSION_COOKIE_HTTPONLY=True
#是否session的cookie只支持http传输 SESSION_COOKIE_AGE = 1209600
#失效日期2周默认 SESSION_COOKIE_AT_BROWSER_CLOSE=False
#是否关闭浏览器使得session过期 SESSION_SAVE_EVERY_REQUEST=False
#是否每次请求都保存session,默认修改之后才保存
session数据可以在request中提取到,所以后端不必传值。
#用session 传递数据至前端(session数据封装在request里)
#前端:
<span>
<h3>{{request.session.user}}</h3>
</span> #后端
def index(request):
if request.session.get(“is_log,None)
return render(request,”index.html”)
else:
return redirect(“/login/”)
Django 中默认支持session,其内部提供了5中类型的session公开发者使用:
- 数据库(默认)
- 缓存
- 文件
- 缓存+数据库
- 加密+cookie
Django学习手册 - cookie / session的更多相关文章
- python 学习笔记十九 django深入学习四 cookie,session
缓存 一个动态网站的基本权衡点就是,它是动态的. 每次用户请求一个页面,Web服务器将进行所有涵盖数据库查询到模版渲染到业务逻辑的请求,用来创建浏览者需要的页面.当程序访问量大时,耗时必然会更加明显, ...
- Django学习之Cookie和Session
一.Cookie 1.Cookie的由来 2.什么是Cookie 3.Cookie的原理 4.查看Cookie 二.Django中操作Cookie 1.获取Cookie 2.设置Cookie 3.删除 ...
- Django 认证系统 cookie & session & auth模块
概念 cookie不属于http协议范围,由于http协议无法保持状态,但实际情况,我们却又需要“保持状态”,因此cookie就是在这样一个场景下诞生. cookie的工作原理是:由服务器产生内容,浏 ...
- 49、django工程(cookie+session)
49.1.介绍: 1.cookie不属于http协议范围,由于http协议无法保持状态,但实际情况,我们却又需要"保持状态",因此cookie就是在这样一个场景下诞生. cooki ...
- Django 学习之cookie与session
一.cookie和session的介绍 cookie不属于http协议范围,由于http协议无法保持状态,但实际情况,我们却又需要“保持状态”,因此cookie就是在这样一个场景下诞生. cookie ...
- django学习之- Cookie
cookie:客户端游览器上的一个文件,以键值对进行保存,类似字典{'k':'sfs'},与服务器端没有关系,当游览器访问服务器时候,服务器会生成一个随机字符串保存在cookie中返回给客户端,这样当 ...
- 【转】学习总结--Cookie & Session总结
转载地址:http://www.phperzone.cn/portal.php?aid=718&mod=view 一.状态管理 1)什么是状态管理? 将浏览器与web服务器之间多次交互过程 ...
- Web安全测试学习笔记(Cookie&Session)
一,Session:含义:有始有终的一系列动作\消息1, 隐含了“面向连接” 和“保持状态”两种含义2, 一种用来在客户端与服务器之间保持状态的解决方案3, 也指这种解决方案的存储结构“把××保存在s ...
- Django学习手册 - 权限管理(二)
从数据库获取数据后,对数据进行清洗 目标: 数据1,存放至session 中的数据 数据2,显示至前端的菜单数据 清洗数据: 1.session存放的数据:(menu_leaf_dict) 2.前端菜 ...
随机推荐
- Java 8新特性之 并行和并行数组(八恶人-8)
Jody Domingre 多莫歌·乔迪 “How you doing, dummy?” 你还好吗,傻瓜 一.基本介绍 Java8不仅增加了Stream,而且还增加了parallelStream(并行 ...
- hdu 6394 Tree (2018 Multi-University Training Contest 7 1009) (树分块+倍增)
链接: http://acm.hdu.edu.cn/showproblem.php?pid=6394 思路:用dfs序处理下树,在用分块,我们只需要维护当前这个点要跳出这个块需要的步数和他跳出这个块去 ...
- BZOJ5312 冒险(势能线段树)
BZOJ题目传送门 表示蒟蒻并不能一眼看出来这是个势能线段树. 不过仔细想想也并非难以理解,感性理解一下,在一个区间里又与又或,那么本来不相同的位也会渐渐相同,线段树每个叶子节点最多修改\(\log ...
- SharePoint 错误集
1. Delete a site collection · Run command : Remove-SPSite –Identity http://ent132.sharepoint.hp.com/ ...
- luogu1073 最优贸易 (tarjan+dp)
tarjan缩点,然后按照拓扑序,做1号点能到达的点的答案具体做法是对每个点记一个min[i],max[i],vis[i]和ans[i]做拓扑序的时候,假设在从u点开始做,有边u到v,如果vis[u] ...
- 解决centos6.5不能识别NTFS格式的移动硬盘或U盘问题
0.说明 从windows8拷了一些东西到移动硬盘,然后转到新安装的centos6.5系统上,但是插上移动硬盘的时候发现不能识别,无法正常挂载移动硬盘.到网上一搜,发现原来centos系统默认不识别N ...
- [codevs3342][绿色通道]
codevs3342 思路: 既然是要求最小化最长空题段,直接二分答案.然后就是check函数的写法. 先考虑n方转移,假设当前二分的答案是x,用f[i]表示前i个题,第i道题写的最小花费时间.最后再 ...
- (转)同一服务器部署多个tomcat时的端口号修改详情
背景:在同一个服务器上部署工程,总会遇到tomcat端口占用的情况,所有有必要分清楚各个端口的作用,和需要更改的端口. 同一服务器部署多个tomcat时,存在端口号冲突的问题,所以需要修改tomcat ...
- Python基础学习(五)
一.使用模块 已经了解了什么是模块,模块就是一个个文件的体,我们可以做不同的文件中引入各个模块文件,当然如果模块有冲突,还可以给模块文件的上层建立一个目录简称包,包名只能唯一,不能重名. 另外,一旦建 ...
- python之配置日志的几种方式
作为开发者,我们可以通过以下3种方式来配置logging: 1)使用Python代码显式的创建loggers, handlers和formatters并分别调用它们的配置函数: 2)创建一个日志配置文 ...