cookie

  1. """
  2. cookie属性:
  3. obj.set_cookie(key,value,....)
  4. obj.set_signed_cookie(key,value,salt="加密盐",....)
  5. 参数:
  6. key 键
  7. value=“”  值
  8. max_age=None 超时时间
  9. expires=None 超时日期
  10. path="/" cookit生效的路径,/表示根路径,特殊的,跟路径的cookie可以被任何url被任何url的页面访问
  11. domain=None cookie生效的域名
  12. secure=False https传输
  13. httponly=False 只能http协议传输,无法javascript获取(不是绝对,底层抓包可以获取到)
  14.  
  15. 获取cookie
  16. request.COOKIES
  17. request.COOKIES['username']
  18. request.COOKIES.get("username")
  19.  
  20. 设置cookie
  21. response = render(request,'index.html')
  22. response = redirect("/index/")
  23. response = set_cookie("key","value")
  24. return response
  25.  
  26. 加盐配置:
  27. obj = HttpResponse("S")
  28. 获取加盐cookie
  29. obj.set_signed_cookie("username","passwd",salt="jiayan")
  30. 设置加盐cookie
  31. obj.get_signed_cookie("username",salt="jiayan")
  32. 获取与设置的加盐 一定要是相同的加盐字符
  33.  
  34. """

前端:(login 页面)

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>Title</title>
  6. </head>
  7. <body>
  8. <div>
  9. <form action="/login/" method="post">
  10. <p>
  11. <span>用户名:</span> <input type="text" name="user">
  12. <span>密码:</span><input type="password" name="pwd">
  13. <input type="submit" value="提交">
  14. </p>
  15. </form>
  16. </div>
  17. </body>
  18. </html>

前端:(index页面)

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>Title</title>
  6. </head>
  7. <body>
  8. <h1>
  9. 欢迎登录.........
  10.  
  11. </h1>
  12. </body>
  13. </html>

URL:

  1. from django.contrib import admin
  2. from django.urls import path
  3. from django.conf.urls import url
  4. from app01 import views
  5.  
  6. urlpatterns = [
  7. path('admin/', admin.site.urls),
  8. url('^login/', views.login),
  9. url('^index/', views.index),
  10. ]

后端:

  1. from django.shortcuts import render,HttpResponse,redirect
  2.  
  3. # Create your views here.
  4.  
  5. def login(request):
  6. print(request.COOKIES)
  7. print(request.session)
  8. if request.method == "POST":
  9. u = request.POST.get("user",None)
  10. p= request.POST.get("pwd",None)
  11. if u == "root" and p == "":
  12. # cookie的方式:
  13. # ret = redirect("/index/")
  14. # #设置cookie数值
  15. # ret.set_cookie("name","123",10)
  16. # return ret
  17.  
  18. #session方式
  19. request.session["info_login"]=True
  20. request.session["user"] = u
  21. return redirect("/index/")
  22.  
  23. else:
  24. redirect("/login/")
  25. return render(request,"login.html")
  26.  
  27. def index(request):
  28. #cookie
  29. # if request.COOKIES.get("name",None):
  30. # print("index")
  31. # return render(request,"index.html")
  32.  
  33. #session
  34. if request.session.get("info_login",None):
  35. name = request.session.get("user")
  36. return render(request,"index.html")
  37. #session 默认存放在数据库中。
  38.  
  39. else:
  40. return redirect("/login/")

--------------------------------------------------------------------------------------------------------------------------------------------------------

装饰器的方式:

  1. from django.shortcuts import render,redirect,HttpResponse
  2.  
  3. # Create your views here.
  4.  
  5. def aut(fum):
  6. def log(request,*args,**kwargs):
  7. if request.COOKIES.get("user",None):
  8. return fum(request,*args,**kwargs)
  9. else:
  10. return redirect("/login/")
  11. return log
  12.  
  13. def login(request):
  14. if request.method == "POST":
  15. u = request.POST.get("user", None)
  16. p = request.POST.get("pwd", None)
  17. if u == "root" and p == "":
  18. ret = redirect("/index/")
  19. # ret.set_cookie("user", u)
  20. ret.set_signed_cookie("user",u,salt="abcd")
  21.  
  22. return ret
  23. else:
  24. return redirect("/login/")
  25. return render(request,"login.html")
  26.  
  27. @aut
  28. def index(request):
  29. return HttpResponse("OK")

  1. 核心 session
  2. 1.session 依赖cookie
  3. 2.Session流程
  4. 3.Session操作
  5. 4.Session配置
  6. 5.Session存储

  7. 注意!!!
    django 默认数据存储在数据表格中的,所以在配置好之前一定要创建数据表格!!!
    python manage.py makemigrations
    python manage.py migrate
  8. #生成随机字符串
  9. #写到用户浏览器cookie
  10. #保存到session中
  11. #在随机字符串对应的字典中设置相关内容
  12. Request.session[‘user’] = user
  13. Request.session[‘is_login’] = True
  14. Return redirect(“/index/”)
  15.  
  16. #Session 获取数据
  17. Request.session[‘k1’]
  18. Request.session.get(“k1”,None)
  19.  
  20. #设置数据
  21. Request.session[‘k1’] = 123
  22. Request.session.setdefault(“k1”,123)
  23. #存在则不设置
  24.  
  25. #删除数据
  26. Del request.session[‘k1’]
  27. Request.session.clear()
  28. Request.session.delete(‘session_key
  29. )
  30.  
  31. #所有键值,键值对
  32. Request.session.keys()
  33. Request.session.values()
  34. Request.session.items()
  35. Request.session.iterkeys()
  36. Request.session.itervalues()
  37. Request.session.iteritems()
  38.  
  39. #用户session的随机字符串
  40. Request.session.session_key
  41.  
  42. #将所有session失效时间小于当前日期的数据删除
  43. Request.session.clear_expired()
  44.  
  45. #检查用户session的随机字符串在数据中是否
  46. Request.session.exists(“session_key”)
  47.  
  48. #删除当前用户的所有session数据
  49. Request.session.delete(“session_key”)
  50.  
  51. Request.session.set_expiry(value)
  52. *如果value是个整数,session会在些秒数后失效。
  53. *如果是value是个datatimetimedeltasession就会在这个时间后失效
  54. *如果value0,用户关闭浏览器session就会失效。
  55. *如果valueNonesession会依赖全局session失效策略
  56.  
  57. #在setting里面设置
  58. SESSION_COOKIE_NAME = sessionid
  59. #session 的cookie保存在浏览器上时的key,即:sessionid=随机字符串(默认)
  60.  
  61. SESSION_COOKIE_PATH = ‘/’
  62. #session 的cookie 保存的路径(默认)
  63.  
  64. SESSION_COOKIE_DOMAIN=None
  65. #session 的cookie 保存的域名(默认)
  66.  
  67. SESSION_COOKIE_SECURE=False
  68. #是否HTTP传输cookie
  69.  
  70. SESSION_COOKIE_HTTPONLY=True
  71. #是否session的cookie只支持http传输
  72.  
  73. SESSION_COOKIE_AGE = 1209600
  74. #失效日期2周默认
  75.  
  76. SESSION_COOKIE_AT_BROWSER_CLOSE=False
  77. #是否关闭浏览器使得session过期
  78.  
  79. SESSION_SAVE_EVERY_REQUEST=False
  80. #是否每次请求都保存session,默认修改之后才保存

session数据可以在request中提取到,所以后端不必传值。

  1. #用session 传递数据至前端(session数据封装在request里)
  2. #前端:
  3. <span>
  4. <h3>{{request.session.user}}</h3>
  5. </span>
  6.  
  7. #后端
  8. def index(request):
  9. if request.session.get(“is_log,None)
  10.   return render(request,”index.html”)
  11. else:
  12.   return redirect(“/login/”)

Django 中默认支持session,其内部提供了5中类型的session公开发者使用:

  • 数据库(默认)
  • 缓存
  • 文件
  • 缓存+数据库
  • 加密+cookie

Django学习手册 - cookie / session的更多相关文章

  1. python 学习笔记十九 django深入学习四 cookie,session

    缓存 一个动态网站的基本权衡点就是,它是动态的. 每次用户请求一个页面,Web服务器将进行所有涵盖数据库查询到模版渲染到业务逻辑的请求,用来创建浏览者需要的页面.当程序访问量大时,耗时必然会更加明显, ...

  2. Django学习之Cookie和Session

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

  3. Django 认证系统 cookie & session & auth模块

    概念 cookie不属于http协议范围,由于http协议无法保持状态,但实际情况,我们却又需要“保持状态”,因此cookie就是在这样一个场景下诞生. cookie的工作原理是:由服务器产生内容,浏 ...

  4. 49、django工程(cookie+session)

    49.1.介绍: 1.cookie不属于http协议范围,由于http协议无法保持状态,但实际情况,我们却又需要"保持状态",因此cookie就是在这样一个场景下诞生. cooki ...

  5. Django 学习之cookie与session

    一.cookie和session的介绍 cookie不属于http协议范围,由于http协议无法保持状态,但实际情况,我们却又需要“保持状态”,因此cookie就是在这样一个场景下诞生. cookie ...

  6. django学习之- Cookie

    cookie:客户端游览器上的一个文件,以键值对进行保存,类似字典{'k':'sfs'},与服务器端没有关系,当游览器访问服务器时候,服务器会生成一个随机字符串保存在cookie中返回给客户端,这样当 ...

  7. 【转】学习总结--Cookie & Session总结

    转载地址:http://www.phperzone.cn/portal.php?aid=718&mod=view 一.状态管理 1)什么是状态管理?   将浏览器与web服务器之间多次交互过程 ...

  8. Web安全测试学习笔记(Cookie&Session)

    一,Session:含义:有始有终的一系列动作\消息1, 隐含了“面向连接” 和“保持状态”两种含义2, 一种用来在客户端与服务器之间保持状态的解决方案3, 也指这种解决方案的存储结构“把××保存在s ...

  9. Django学习手册 - 权限管理(二)

    从数据库获取数据后,对数据进行清洗 目标: 数据1,存放至session 中的数据 数据2,显示至前端的菜单数据 清洗数据: 1.session存放的数据:(menu_leaf_dict) 2.前端菜 ...

随机推荐

  1. BZOJ1036[ZJOI2008]树的统计——树链剖分+线段树

    题目描述 一棵树上有n个节点,编号分别为1到n,每个节点都有一个权值w.我们将以下面的形式来要求你对这棵树完成一些操作: I. CHANGE u t : 把结点u的权值改为t II. QMAX u v ...

  2. MT【58】反演圆和极线极点和谐统一

    解答:如图 评:1.反演圆及其性质介绍: 评2:此题的源头是1995年全国卷压轴题,这里用极线极点的相关性质也可以处理: 注:用相关点法很容易得到轨迹.

  3. 【刷题】LOJ 2863 「IOI2018」组合动作

    题目描述 你在玩一个动作游戏.游戏控制器有 \(4\) 个按键,A.B.X 和 Y.在游戏中,你用组合动作来赚金币.你可以依次按这些按键来完成一个组合动作. 这个游戏有一个隐藏的按键序列,可以表示为由 ...

  4. FFT/NTT总结+洛谷P3803 【模板】多项式乘法(FFT)(FFT/NTT)

    前言 众所周知,这两个东西都是用来算多项式乘法的. 对于这种常人思维难以理解的东西,就少些理解,多背板子吧! 因此只总结一下思路和代码,什么概念和推式子就靠巨佬们吧 推荐自为风月马前卒巨佬的概念和定理 ...

  5. 自学Linux Shell12.6-嵌套循环for命令

    点击返回 自学Linux命令行与Shell脚本之路 12.6-嵌套循环for命令 嵌套循环就是在一个循环中还有一个循环. 内部循环在外部循环体中,在外部循环的每次执行过程中都会触发内部循环,直到内部循 ...

  6. A1041. Be Unique

    Being unique is so important to people on Mars that even their lottery is designed in a unique way. ...

  7. java.sql.SQLException: [Microsoft][ODBC Microsoft Access Driver] 不能使用 '(未知的)';文件已在使用中

    最近查看程序输入的日志时发现一个java连接Access的程序时不时的抛出: java.sql.SQLException: [Microsoft][ODBC Microsoft Access Driv ...

  8. 洛谷 P3951 小凯的疑惑(数学)

    传送门:Problem P3951 https://www.cnblogs.com/violet-acmer/p/9827010.html 参考资料: [1]:http://m.blog.sina.c ...

  9. sqlserver 导入数据出现 无法创建 OLE DB 取值函数。请查看列元数据是否有效

    我用的是Sql Server 的导入导出功能来实现的,但是有些数据可以导进去,有些就不行.总是出现一些错误! 执行之前 (错误)消息错误 0xc0202005: 数据流任务: 在数据源中找不到列“Un ...

  10. redis实现队列

    转:https://www.cnblogs.com/nullcc/p/5924244.html 问题:如果一个并发很大的消息应用,想要根据请求的优先级来处理? 答案:用Redis 详解: 一是并发量大 ...