2018-9-20 13:14:40

Cookie session 参考 :http://www.cnblogs.com/liwenzhou/p/8343243.html

类视图  cbv 注册 url

附上源代码

  1. from django.shortcuts import render, redirect
  2.  
  3. # Create your views here.
  4. from functools import wraps
  5.  
  6. def check_login(func):
  7. @wraps(func) # 装饰器修复技术 写上比较讲究
  8. def inner(request, *args, **kwargs):
  9. ret = request.get_signed_cookie("is_login", default="", salt="s10nb")
  10. if ret == "":
  11. # 已经登陆过的 继续执行
  12. return func(request, *args, **kwargs)
  13. # 没有登录过的 跳转到登录页面
  14. else:
  15. # 获取当前访问的URL
  16. next_url = request.path_info
  17. print(next_url)
  18. return redirect("/login/?next={}".format(next_url))
  19. return inner
  20.  
  21. def login(request):
  22. print(request.get_full_path()) # 获取当前请求的路径和参数
  23. print(request.path_info) # 取当前请求的路径
  24. print("-" * 120)
  25.  
  26. if request.method == "POST":
  27. user = request.POST.get("user")
  28. pwd = request.POST.get("pwd")
  29. # 从URL里面取到 next 参数
  30. next_url = request.GET.get("next")
  31.  
  32. if user == "alex" and pwd == "dsb":
  33. # 登陆成功
  34. # 告诉浏览器保存一个键值对
  35.  
  36. if next_url:
  37. rep = redirect(next_url) # 得到一个响应对象
  38. else:
  39. rep = redirect("/home/") # 得到一个响应对象
  40.  
  41. # rep.set_cookie("is_login", "1")
  42. # 设置加盐的cookie
  43. rep.set_signed_cookie("is_login", "", salt="s10nb", max_age=10) # 单位是秒
  44. return rep
  45.  
  46. return render(request, "login.html")
  47.  
  48. def home(request):
  49. # 从请求的cookie中找 有没有 xiaohei
  50. # ret = request.COOKIES.get("is_login", 0)
  51. # 取加盐过的
  52. ret = request.get_signed_cookie("is_login", default="", salt="s10nb")
  53. print(ret, type(ret))
  54. if ret == "":
  55. # 表示已经登陆过
  56. return render(request, "home.html")
  57. else:
  58. return redirect("/login/")
  59.  
  60. @check_login
  61. def index(request):
  62.  
  63. return render(request, "index.html")
  64.  
  65. # 注销函数
  66. def logout(request):
  67. # 如何删除Cookie
  68. rep = redirect("/login/")
  69. rep.delete_cookie("is_login")
  70. return rep
  1. from django.shortcuts import render, redirect
  2. from django import views
  3.  
  4. # Create your views here.
  5. from functools import wraps
  6. # Django提供的工具,把函数装饰器转变成方法装饰器
  7. from django.utils.decorators import method_decorator
  8. from django.views.decorators.csrf import csrf_exempt, csrf_protect
  9.  
  10. def check_login(func):
  11. @wraps(func) # 装饰器修复技术
  12. def inner(request, *args, **kwargs):
  13. ret = request.session.get("is_login")
  14. # 1. 获取cookie中的随机字符串
  15. # 2. 根据随机字符串去数据库取 session_data --> 解密 --> 反序列化成字典
  16. # 3. 在字典里面 根据 is_login 取具体的数据
  17. if ret == "":
  18. # 已经登陆过的 继续执行
  19. return func(request, *args, **kwargs)
  20. # 没有登录过的 跳转到登录页面
  21. else:
  22. # 获取当前访问的URL
  23. next_url = request.path_info
  24. print(next_url)
  25. return redirect("/app02/login/?next={}".format(next_url))
  26. return inner
  27.  
  28. @csrf_exempt
  29. def login(request):
  30. if request.method == "POST":
  31. user = request.POST.get("user")
  32. pwd = request.POST.get("pwd")
  33. # 从URL里面取到 next 参数
  34. next_url = request.GET.get("next")
  35.  
  36. if user == "alex" and pwd == "dsb":
  37. # 登陆成功
  38. # 告诉浏览器保存一个键值对
  39.  
  40. if next_url:
  41. rep = redirect(next_url) # 得到一个响应对象
  42. else:
  43. rep = redirect("/app02/home/") # 得到一个响应对象
  44. # 设置session
  45. request.session["is_login"] = ""
  46. request.session["name"] = user
  47. request.session.set_expiry(7) # 7秒钟之后失效
  48. return rep
  49.  
  50. return render(request, "app02/login.html")
  51.  
  52. @check_login
  53. def home(request):
  54. user = request.session.get("name")
  55. return render(request, "app02/home.html", {"user": user})
  56.  
  57. @check_login
  58. def index(request):
  59.  
  60. return render(request, "app02/index.html")
  61.  
  62. # 注销函数
  63. def logout(request):
  64. # 只删除session数据
  65. # request.session.delete()
  66. # 如何删除session数据和cookie
  67. request.session.flush()
  68. return redirect("/app02/login/")
  69.  
  70. # 装饰器添加到类上面 需要注明方法名 装饰哪个方法
  71. # @method_decorator(check_login, name="get")
  72. class UserInfo(views.View):
  73.  
  74. @method_decorator(check_login)
  75. def get(self, request):
  76. return render(request, "app02/userinfo.html")

9.20 session的更多相关文章

  1. java web学习总结(十二) -------------------Session

    一.Session简单介绍 在WEB开发中,服务器可以为每个用户浏览器创建一个会话对象(session对象),注意:一个浏览器独占一个session对象(默认情况下).因此,在需要保存用户数据时,服务 ...

  2. javaWeb学习-----session

    一.Session简单介绍 在WEB开发中,服务器可以为每个用户浏览器创建一个会话对象(session对象),注意:一个浏览器独占一个session对象(默认情况下).因此,在需要保存用户数据时,服务 ...

  3. session 学习

    session机制是一种服务器端的机制,服务器使用一种类似于散列表的结构(也可能就是使用散列表)来保存信息. 当程式需要为某个客户端的请求创建一个session的时候,服务器首先检查这个客户端的请求里 ...

  4. JavaWeb---总结(十二)Session

    一.Session简单介绍 在WEB开发中,服务器可以为每个用户浏览器创建一个会话对象(session对象),注意:一个浏览器独占一个session对象(默认情况下).因此,在需要保存用户数据时,服务 ...

  5. JavaWeb学习总结(十二)——Session

    一.Session简单介绍 在WEB开发中,服务器可以为每个用户浏览器创建一个会话对象(session对象),注意:一个浏览器独占一个session对象(默认情况下).因此,在需要保存用户数据时,服务 ...

  6. servlet会话技术:Session

    问题的引出 1.在网上购物时,张三和李四购买的商品不一样,他们的购物车中显示的商品也不一样,这是怎么实现的呢? 2.不同的用户登录网站后,不管该用户浏览该网站的那个页面,都可以显示登录人的名字,同时可 ...

  7. 第二节 hibernate session介绍以及session常用方法介绍

    原创地址:http://www.cnblogs.com/binyulan/p/5628579.html Session是java应用程序和hibernate框架之间的一个主要接口.它是从持久化服务中剥 ...

  8. JavaWeb学习 (十一)————Session

    一.Session简单介绍 在WEB开发中,服务器可以为每个用户浏览器创建一个会话对象(session对象),注意:一个浏览器独占一个session对象(默认情况下).因此,在需要保存用户数据时,服务 ...

  9. session 详解

    一.Session简单介绍 在WEB开发中,服务器可以为每个用户浏览器创建一个会话对象(session对象),注意:一个浏览器独占一个session对象(默认情况下).因此,在需要保存用户数据时,服务 ...

随机推荐

  1. HTTP 请求未经客户端身份验证方案“Anonymous”授权。

    今天调取WebService的时候报: HTTP 请求未经客户端身份验证方案“Anonymous”授权. 解决办法: 配置文件里改: <basicHttpBinding> <bind ...

  2. HTML5标签canvas图像处理

    摘要: canvas可以读取图片后,使用drawImage方法在画布内进行重绘.本文介绍canvas的图像处理 drawImage drawImage() 方法在画布上绘制图像.画布或视频.drawI ...

  3. Struts2_day04讲义_使用Struts2完成用户登录的权限拦截器的代码编写

  4. zabbix中Templates的jmx相关key调试方法

    1.下载 cmdline jmxclient 如果你有一个完美的模版,你可能可以忽略此步.但是大多数情况下你没有.况且 zabbix 默认的 tomcat 模版也不能很好的工作.这时候有一个工具来调试 ...

  5. Echarts调整图表上下左右的间距,Echarts调整柱状图左右的间距

    Echarts调整图表上下左右的间距,Echarts调整柱状图左右的间距 >>>>>>>>>>>>>>>> ...

  6. Android开发-- Genymotion模拟器

    模拟器安装 http://blog.csdn.net/beiminglei/article/details/13776013 连接ADB http://android3g.diandian.com/p ...

  7. Redis 操作有序集合数据

    Redis 操作有序集合数据: > zadd names "Tom" // zadd 用于往有序集合中添加元素,其中 1 在 Redis 中称为 score(分数),用来进行 ...

  8. hadoop关联文件处理

    c001.txt ------------------------------ filetype|commid|commname|addressidcomm|1|罗湖小区1|1comm|2|罗湖小区2 ...

  9. 简析iOS动画原理及实现——Core Animation

    本文转载至 http://www.tuicool.com/articles/e2qaYjA 原文  https://tech.imdada.cn/2016/06/21/ios-core-animati ...

  10. listView优化方案

    1.如果自定义适配器,那么在getView方法中要考虑方法传进来的参数contentView是否为null,如果为null就创建contentView并返回,如果不为null则直接使用.在这个方法中尽 ...