Django中的Cookie--实现登录

Django Cookie 

Cookie

Cookie 是什么

保存在浏览器端的键值对,让服务器提取有用的信息。

为什么要有 Cookie

因为HTTP请求是无状态的。

无状态的意思是每次请求都是独立的,它的执行情况和结果与前面的请求和之后的请求都无直接关系,它不会受前面的请求响应情况直接影响,也不会直接影响后面的请求响应情况。

状态可以理解为客户端和服务器在某次会话中产生的数据,那无状态的就以为这些数据不会被保留。会话中产生的数据又是我们需要保存的,也就是说要“保持状态”。因此Cookie就是在这样一个场景下诞生。

Cookie 的原理

服务端可以在返回响应的时候 做手脚
在浏览器上写入键值对(Cookie)

浏览器发送请求的时候会自动携带该网站保存在我浏览器的键值对(Cookie)

Chrome 上查看 Cookie

查看Cookie

Django 中操作 Cookie

设置 Cookie

只有响应对象才能设置 Cookie

# 响应对象
rep = HttpResponse(...)
rep = render(request, ...)
rep = redirect(...)# 不加密方式设置Cookie
rep.set_cookie(key,value,...)# 加密方式设置Cookie
rep.set_signed_cookie(key,value,salt='加密盐',...)

参数

  • key, 键
  • value='', 值
  • max_age=None, 超时时间
  • expires=None, 超时时间(IE requires expires, so set it if hasn't been already.)
  • path='/', Cookie生效的路径,/ 表示根路径,特殊的:根路径的 cookie 可以被任何url的页面访问
  • domain=None, Cookie 生效的域名
  • secure=False, https 传输
  • httponly=False 只能 http 协议传输,无法被 JavaScript 获取(不是绝对,底层抓包可以获取到也可以被覆盖)

获取 Cookie

  1. 不加密的 Cookie 获取:

    request.COOKIES['key']
    request.COOKIES.get('key')
    

  2. 加密的 Cookie 获取
    request.get_signed_cookie(key, default=RAISE_ERROR, salt='', max_age=None)
    

    参数:

    • default: 默认值
    • salt: 加密盐
    • max_age: 后台控制过期时间

删除 Cookie

删除 Cookie 操作大多是在注销时用的,也是 通过响应对象删除

def logout(request):# 删除cookie,操作的是响应对象,最后需要返回rep = redirect("/app01/login/")rep.delete_cookie("is_login")return rep

Cookie 版登录代码

from django.shortcuts import render, redirect# 导入用于装饰器修复技术的包
from functools import wraps
# Create your views here.# 装饰器函数,用来判断是否登录
def check_login(func):
    @wraps(func)  # 装饰器修复技术def inner(request, *args, **kwargs):ret = request.get_signed_cookie("is_login", default="0", salt="ban")if ret == "1":# 已经登录,继续执行return func(request, *args, **kwargs)# 没有登录过else:# ** 即使登录成功也只能跳转到home页面,现在通过在URL中加上next指定跳转的页面# 获取当前访问的URLnext_url = request.path_inforeturn redirect("/app01/login/?next={}".format(next_url))return innerdef login(request):if request.method == "POST":username = request.POST.get("username")pwd = request.POST.get("pwd")next_url = request.GET.get("next")if username == "alex" and pwd == "dsb":# return redirect("/home/")# 服务器返回的响应对象# 通过URL中的next参数指定跳转的页面,如果为空,默认跳转到home页面if next_url:rep = redirect(next_url)else:print("ban")rep = redirect("/app01/home/")# 1. 设置cookie# rep.set_cookie("is_login", "1")# 2. 设置加盐cookie,max_age是cookie的生存时间rep.set_signed_cookie("is_login", "1", salt="ban", max_age=100)return repreturn render(request, "app01/login.html")def home(request):# 获取cookie并判断# if request.COOKIES.get("is_login", 0) == "1":# 获取加盐cookie并判断ret = request.get_signed_cookie("is_login", default="0", salt="ban")if ret == "1":return render(request, "app01/home.html")else:return redirect("/app01/login/")# 注销函数
def logout(request):# 删除cookie,操作的是响应对象,最后需要返回rep = redirect("/app01/login/")rep.delete_cookie("is_login")return rep@check_login
def index(request):return render(request, "app01/index.html")

参考:https://www.cnblogs.com/liwenzhou/p/8343243.html
GitHub地址:https://github.com/protea-ban/oldboy/tree/master/s9day71/xiawu

转载于:https://www.cnblogs.com/banshaohuan/p/9493021.html

Django中的Cookie--实现登录相关推荐

  1. Django 中的 cookie 和 session

    一.cookie 由于HTTP协议是无状态的,而服务器端的业务必须是要有状态的.Cookie诞生的最初目的是为了存储web中的状态信息,以方便服务器端使用.比如判断用户是否是第一次访问网站.目前最新的 ...

  2. Django框架(21.Django中设置cookie以及获取cookie)

    状态保持 http协议是无状态的.下一次去访问一个页面时并不知道上一次对这个页面做了什么 Cookie 1.cookie是由服务器生成,存储在浏览器端的一小段文本信息. 2.cookie的特点: 以键 ...

  3. Django框架(26.Django中的CSRF以及登录装饰器)

    CSRF简介 CSRF全拼为Cross Site Request Forgery,译为跨站请求伪造.CSRF指攻击者盗用了你的身份,以你的名义发送恶意请求.CSRF能够做的事情包括:以你名义发送邮件, ...

  4. Django中的cookie与session

    cookie与session的实现原理 HTTP被设计为"无状态",每次请求都处于相同的空间中. 在一次请求和下一次请求之间没有任何状态保持,我们无法根据请求的任何方面(IP地址, ...

  5. html登录界面cookie,HTML中使用cookie保存登录账户

    用户点击登录按钮后  判断当前账户是否存在 如果存在 并且勾选了记住帐号  使用cookie保存帐号密码 如果存在 但是没有勾选记住帐号 遍历cookie  删除帐号密码 //判断当前用户是否存在 i ...

  6. Django中session和cookie简单的使用

    一.简单的理解 session和cookie是request下的两个对象,操作他们的值就是在操作字典,设置他们的属性就是调用方法. 会话(Session)跟踪是Web程序中常用的技术,用来跟踪用户的整 ...

  7. cookie和session 以及Django中应用

    cookie和session 以及Django中应用 cookie和session机制 cookie和session机制 cookie机制采用的是在客户端保持状态的方案.作用就是为了解决HTTP协议无 ...

  8. Django中cookie和session的存、取、删除

    Django中: cookie的存: response = HttpResponse('登陆成功') #改成重定向等都可以 response.set_cookie('username',usernam ...

  9. Django学习之Cookie和Session

    一.Cookie 1.Cookie的由来 2.什么是Cookie 3.Cookie的原理 4.查看Cookie 二.Django中操作Cookie 1.获取Cookie 2.设置Cookie 3.删除 ...

最新文章

  1. Noticaition 1.0 正式发布了
  2. Oracle中TO_DATE格式的使用小结
  3. leetcode 396. Rotate Function | 396. 旋转函数(错位相减)
  4. 51nod1743-雪之国度【最小生成树,LCA,并查集】
  5. Spring Boot场景启动器(Starter)
  6. itextpdf html 样式,将HTML解析为PDF的iText样式
  7. NModBus的使用
  8. 用户权限管理模块的数据库设计
  9. vs2005安装使用指南
  10. h5页面 请在微信客户端打开链接_模拟微信接口时,提示“请在微信客户端打开链接”(转)...
  11. Windows运行机理——主程序—WinMain
  12. matlab泊松分布随机数和图像,基于Matlab的Poisson分布随机数的Monte carlo模拟
  13. 10938 - Flea circus
  14. 6. Lots of Parabolas
  15. tomcat两种启动方式
  16. 济南江苏商会成立 全国工商联·万祥军:商协社团厚德聚苏商
  17. 2023最新SSM计算机毕业设计选题大全(附源码+LW)之java基于java网上心理咨询系统50fxl
  18. 微信电话显示对方忙是为什么 微信电话显示对方忙是什么意思
  19. Linux中alias永久更改命令别名
  20. 瞄准前沿科技,美团是不务正业还是另有所图?

热门文章

  1. POJ1321 棋盘问题
  2. MySQL配置文件my.cnf中文版(转载)
  3. struts2访问session的两种方法
  4. const 和 #define区别
  5. asp.net TemplateField模板中的Bind方法和Eval方法
  6. Makefile_04:Makefile变量初了解
  7. C++11 的新特性
  8. 《深入理解计算机系统》读书笔记九:寄存器结构
  9. 前端一HTML:十五: 层叠,权重,优先级的关系
  10. HanLP二元核心词典详细解析