Django基础之cookie
1. Cookie
1.1 Cookie的由来
大家都知道HTTP协议是无状态的。无状态的意思是每次请求都是独立的,它的执行情况和结果与前面的请求和之后的请求都无直接关系, 它不会受前面的请求响应情况直接影响, 也不会直接影响后面的请求响应情况。
一句话来概括, 对于服务器来说, 每次的请求都是全新的。
状态可以理解为客户端和服务器在每次会话中产生的数据, 那无状态的就以为这些数据不会被保留. 会话中产生的数据又是我们需要保存的, 也就是说要"保持状态". 因此Cookie就是在这样一个场景下诞生。
1.2 什么是Cookie
Cookie具体指的是一段小信息, 它是服务器发送出来存储在浏览器上的一组组键值对, 下次访问服务器时浏览器会自动携带这些键值对, 以便服务器提取有用的信息。
1.3 Cookie的原理
cookie的工作原理是: 由服务器产生内容, 浏览器收到请求后保存在本地; 当浏览器再次访问时, 浏览器会自动带上Cookie, 这样服务器就能通过Cookie的内容来判断这个是"谁"了。
1.4 查看Cookie
我们使用Chrome浏览器, 打开开发者工具.。

2. Django中操作Cookie
2.1 获取cookie
request.COOKIES["key"]
request.get_signed_cookie("key", default=RAISE_ERROR, salt="", max_age=None)
get_signed_cookie方法的参数:
- default默认值
- salt: 加密盐
- max_age: 后台控制过期时间
2.2 设置Cookie
rep = HttpResponse(...)
rep = render(request, ...) rep.set_cookie(key, value, ...)
rep.set_signed_cookie(key, value, salt="加密盐", ...)
参数:
key 键
value="" 值
max_age=None 超时时间
expires=None 超时时间(IE requires expores, so set it if hasn't been already)
path="/" cookie生效的路径, /表示根路径, 特殊的: 根路径的cookie可以被任何url的页面访问
domain=None Cookie生效的域名
secure=False https传输
httponly=False 只能http协议传输, 无法被JavaScript获取(不是绝对, 底层抓包可以获取到也可以被覆盖)
2.3 删除cookie
def logout(request):
rep = redirect("/login/")
rep.delete_cookie
3. Cookie版登录校验
from django.shortcuts import render, redirect, HttpResponse def login_required(func):
def inner(request, *args, **kwargs):
return_url = request.path_info
print(return_url)
if request.COOKIES.get("is_login") == "True":
print("cookies true")
ret = func(request, *args, **kwargs)
return ret
else:
return redirect("/login/?ReturnUrl={}".format(return_url)) return inner def login(request):
err_msg = ""
if request.method == "POST":
username = request.POST.get("username")
password = request.POST.get("password")
print(username, password)
if username == "yang" and password == "123":
return_url = request.GET.get("ReturnUrl", "")
if return_url:
ret = redirect(return_url)
else:
ret = redirect("/index/")
ret.set_cookie("is_login", "True", max_age=604800)
return ret
else:
err_msg = "用户名或者密码错误"
return render(request, "login.html", {"err_msg": err_msg}) @login_required
def index(request):
return render(request, "index.html") @login_required
def home(request):
return HttpResponse("这是home页面") @login_required
def logout(request):
rep = redirect("/login/")
rep.delete_cookie("is_login")
return rep
Django基础之cookie的更多相关文章
- django基础 -- 8.cookie 和 session
一. cookie 1.cookie 的原理 工作原理是:浏览器访问服务端,带着一个空的cookie,然后由服务器产生内容, 浏览器收到相应后保存在本地:当浏览器再次访问时,浏览器会自动带上Cooki ...
- Django基础之cookie与session
cookie与session 由来及简介 HTTP协议四大特性 1.基于请求响应 2.基于TCP.IP作用于应用层之上 3.无连接 4.无状态 基于HTTP协议的通信无法记录客户端状态 但是现在很多软 ...
- django 基础进 COOKIE
1 cookie session auth cookie概念:针对每一个服务器,保存在客户端浏览器的一个key-value结构数据,可以理解成一个字典结构 cookie语法: ...
- 老师的blog整理 .网络编程部分 .网络编程部分 前端部分 django基础部分
老师的blog整理 python基础部分: 宝哥blog: https://www.cnblogs.com/guobaoyuan/ 开哥blog: https://home.cnblogs.com/u ...
- 老师的blog整理 .网络编程部分 .网络编程部分 前端部分 django基础部分
老师的blog整理 .网络编程部分 .网络编程部分 前端部分 django基础部分 老师的blog整理 python基础部分: 宝哥blog: https://www.cnblogs.com/gu ...
- {Django基础八之cookie和session}一 会话跟踪 二 cookie 三 django中操作cookie 四 session 五 django中操作session
Django基础八之cookie和session 本节目录 一 会话跟踪 二 cookie 三 django中操作cookie 四 session 五 django中操作session 六 xxx 七 ...
- Django基础cookie和session
Django基础cookie和session 1.会话跟踪 什么是会话!可以把会话理解为客户端与服务器之间的一次会晤,在一次会晤中可能会包含多次请求和响应.例如给10086打个电话,你就是客户端, ...
- day 62.3 Django基础八之cookie和session
Django基础八之cookie和session 本节目录 一 会话跟踪 二 cookie 三 django中操作cookie 四 session 五 django中操作session 六 xxx ...
- day 66 Django基础之jQuery操作cookie
Django基础之jQuery操作cookie jquery之cookie操作 定义:让网站服务器把少量数据储存到客户端的硬盘或内存,从客户端的硬盘读取数据的一种技术: 下载与引入:jquery. ...
随机推荐
- k8s-jenkins pipeline部署
- 【转载】Jmeter接口测试+压力测试
jmeter是apache公司基于java开发的一款开源压力测试工具,体积小,功能全,使用方便,是一个比较轻量级的测试工具,使用起来非常简单.因为jmeter是java开发的,所以运行的时候必须先要 ...
- Antd中,Form和Select联合使用,导致placeholder不生效分析
在使用antd的form组件时候,需要对Select组件进行语体示,placeholder,但是写的值并不生效 效果如上,但是现实的时候不生效,经检查发现,组件需要传递的是undefined,如果传入 ...
- 怎样查看或修改网页的标题title
网页的标题一般指的是 <title>标签之间的文本节点值, 它会显示在浏览器的标签页上, 我们可以通过 document.title 来查看或修改它: document.title; // ...
- redis常用api
一.全局命令 1.keys * //查看所有键 2.dbsize //键总数,如果存在大量键,线上禁止使用此命令 3.exists key //存在返 ...
- C++性能榨汁机之虚函数的开销
C++性能榨汁机之虚函数的开销 来源 http://irootlee.com/juicer_vtable/ 虚函数的实现 虽然C++标准并没有规定编译器实现虚函数的方式,但是大部分编译器均是采用了虚 ...
- 1 简介mvp模式
1 模型-视图-表示器也称为监视控制器模式 ,如下图表示 2 mvp 模式希望通过表示器(presenter)来关联网页,而不必在他们之间建立严格的 3 一个简单的mvp架构的例子 public ...
- python3使用pytesseract进行验证码识别
pytesseract介绍 1.Python-tesseract是一个基于google's Tesseract-OCR的独立封装包: 2.Python-tesseract功能是识别图片文件中文字,并作 ...
- Java BIO、NIO、AIO 基础,应用场景
Java对BIO.NIO.AIO的支持: Java BIO : 同步并阻塞,服务器实现模式为一个连接一个线程,即客户端有连接请求时服务器端就需要启动一个线程进行处理,如果这个连接不做任何事情会造成不必 ...
- Django框架起步
一.环境安装 二.创建项目 三.项目目录 四.创建项目应用 五.应用目录 六.第一个响应 七.第一个模板页面 八.第一个重定向 九.url应用移植 十.多应用相同模板页面冲突 十一.静态资源的配置 十 ...