9.20 session
2018-9-20 13:14:40
Cookie session 参考 :http://www.cnblogs.com/liwenzhou/p/8343243.html
类视图 cbv 注册 url
附上源代码
- from django.shortcuts import render, redirect
- # Create your views here.
- from functools import wraps
- def check_login(func):
- @wraps(func) # 装饰器修复技术 写上比较讲究
- def inner(request, *args, **kwargs):
- ret = request.get_signed_cookie("is_login", default="", salt="s10nb")
- if ret == "":
- # 已经登陆过的 继续执行
- return func(request, *args, **kwargs)
- # 没有登录过的 跳转到登录页面
- else:
- # 获取当前访问的URL
- next_url = request.path_info
- print(next_url)
- return redirect("/login/?next={}".format(next_url))
- return inner
- def login(request):
- print(request.get_full_path()) # 获取当前请求的路径和参数
- print(request.path_info) # 取当前请求的路径
- print("-" * 120)
- if request.method == "POST":
- user = request.POST.get("user")
- pwd = request.POST.get("pwd")
- # 从URL里面取到 next 参数
- next_url = request.GET.get("next")
- if user == "alex" and pwd == "dsb":
- # 登陆成功
- # 告诉浏览器保存一个键值对
- if next_url:
- rep = redirect(next_url) # 得到一个响应对象
- else:
- rep = redirect("/home/") # 得到一个响应对象
- # rep.set_cookie("is_login", "1")
- # 设置加盐的cookie
- rep.set_signed_cookie("is_login", "", salt="s10nb", max_age=10) # 单位是秒
- return rep
- return render(request, "login.html")
- def home(request):
- # 从请求的cookie中找 有没有 xiaohei
- # ret = request.COOKIES.get("is_login", 0)
- # 取加盐过的
- ret = request.get_signed_cookie("is_login", default="", salt="s10nb")
- print(ret, type(ret))
- if ret == "":
- # 表示已经登陆过
- return render(request, "home.html")
- else:
- return redirect("/login/")
- @check_login
- def index(request):
- return render(request, "index.html")
- # 注销函数
- def logout(request):
- # 如何删除Cookie
- rep = redirect("/login/")
- rep.delete_cookie("is_login")
- return rep
- from django.shortcuts import render, redirect
- from django import views
- # Create your views here.
- from functools import wraps
- # Django提供的工具,把函数装饰器转变成方法装饰器
- from django.utils.decorators import method_decorator
- from django.views.decorators.csrf import csrf_exempt, csrf_protect
- def check_login(func):
- @wraps(func) # 装饰器修复技术
- def inner(request, *args, **kwargs):
- ret = request.session.get("is_login")
- # 1. 获取cookie中的随机字符串
- # 2. 根据随机字符串去数据库取 session_data --> 解密 --> 反序列化成字典
- # 3. 在字典里面 根据 is_login 取具体的数据
- if ret == "":
- # 已经登陆过的 继续执行
- return func(request, *args, **kwargs)
- # 没有登录过的 跳转到登录页面
- else:
- # 获取当前访问的URL
- next_url = request.path_info
- print(next_url)
- return redirect("/app02/login/?next={}".format(next_url))
- return inner
- @csrf_exempt
- def login(request):
- if request.method == "POST":
- user = request.POST.get("user")
- pwd = request.POST.get("pwd")
- # 从URL里面取到 next 参数
- next_url = request.GET.get("next")
- if user == "alex" and pwd == "dsb":
- # 登陆成功
- # 告诉浏览器保存一个键值对
- if next_url:
- rep = redirect(next_url) # 得到一个响应对象
- else:
- rep = redirect("/app02/home/") # 得到一个响应对象
- # 设置session
- request.session["is_login"] = ""
- request.session["name"] = user
- request.session.set_expiry(7) # 7秒钟之后失效
- return rep
- return render(request, "app02/login.html")
- @check_login
- def home(request):
- user = request.session.get("name")
- return render(request, "app02/home.html", {"user": user})
- @check_login
- def index(request):
- return render(request, "app02/index.html")
- # 注销函数
- def logout(request):
- # 只删除session数据
- # request.session.delete()
- # 如何删除session数据和cookie
- request.session.flush()
- return redirect("/app02/login/")
- # 装饰器添加到类上面 需要注明方法名 装饰哪个方法
- # @method_decorator(check_login, name="get")
- class UserInfo(views.View):
- @method_decorator(check_login)
- def get(self, request):
- return render(request, "app02/userinfo.html")
9.20 session的更多相关文章
- java web学习总结(十二) -------------------Session
一.Session简单介绍 在WEB开发中,服务器可以为每个用户浏览器创建一个会话对象(session对象),注意:一个浏览器独占一个session对象(默认情况下).因此,在需要保存用户数据时,服务 ...
- javaWeb学习-----session
一.Session简单介绍 在WEB开发中,服务器可以为每个用户浏览器创建一个会话对象(session对象),注意:一个浏览器独占一个session对象(默认情况下).因此,在需要保存用户数据时,服务 ...
- session 学习
session机制是一种服务器端的机制,服务器使用一种类似于散列表的结构(也可能就是使用散列表)来保存信息. 当程式需要为某个客户端的请求创建一个session的时候,服务器首先检查这个客户端的请求里 ...
- JavaWeb---总结(十二)Session
一.Session简单介绍 在WEB开发中,服务器可以为每个用户浏览器创建一个会话对象(session对象),注意:一个浏览器独占一个session对象(默认情况下).因此,在需要保存用户数据时,服务 ...
- JavaWeb学习总结(十二)——Session
一.Session简单介绍 在WEB开发中,服务器可以为每个用户浏览器创建一个会话对象(session对象),注意:一个浏览器独占一个session对象(默认情况下).因此,在需要保存用户数据时,服务 ...
- servlet会话技术:Session
问题的引出 1.在网上购物时,张三和李四购买的商品不一样,他们的购物车中显示的商品也不一样,这是怎么实现的呢? 2.不同的用户登录网站后,不管该用户浏览该网站的那个页面,都可以显示登录人的名字,同时可 ...
- 第二节 hibernate session介绍以及session常用方法介绍
原创地址:http://www.cnblogs.com/binyulan/p/5628579.html Session是java应用程序和hibernate框架之间的一个主要接口.它是从持久化服务中剥 ...
- JavaWeb学习 (十一)————Session
一.Session简单介绍 在WEB开发中,服务器可以为每个用户浏览器创建一个会话对象(session对象),注意:一个浏览器独占一个session对象(默认情况下).因此,在需要保存用户数据时,服务 ...
- session 详解
一.Session简单介绍 在WEB开发中,服务器可以为每个用户浏览器创建一个会话对象(session对象),注意:一个浏览器独占一个session对象(默认情况下).因此,在需要保存用户数据时,服务 ...
随机推荐
- HTTP 请求未经客户端身份验证方案“Anonymous”授权。
今天调取WebService的时候报: HTTP 请求未经客户端身份验证方案“Anonymous”授权. 解决办法: 配置文件里改: <basicHttpBinding> <bind ...
- HTML5标签canvas图像处理
摘要: canvas可以读取图片后,使用drawImage方法在画布内进行重绘.本文介绍canvas的图像处理 drawImage drawImage() 方法在画布上绘制图像.画布或视频.drawI ...
- Struts2_day04讲义_使用Struts2完成用户登录的权限拦截器的代码编写
- zabbix中Templates的jmx相关key调试方法
1.下载 cmdline jmxclient 如果你有一个完美的模版,你可能可以忽略此步.但是大多数情况下你没有.况且 zabbix 默认的 tomcat 模版也不能很好的工作.这时候有一个工具来调试 ...
- Echarts调整图表上下左右的间距,Echarts调整柱状图左右的间距
Echarts调整图表上下左右的间距,Echarts调整柱状图左右的间距 >>>>>>>>>>>>>>>> ...
- Android开发-- Genymotion模拟器
模拟器安装 http://blog.csdn.net/beiminglei/article/details/13776013 连接ADB http://android3g.diandian.com/p ...
- Redis 操作有序集合数据
Redis 操作有序集合数据: > zadd names "Tom" // zadd 用于往有序集合中添加元素,其中 1 在 Redis 中称为 score(分数),用来进行 ...
- hadoop关联文件处理
c001.txt ------------------------------ filetype|commid|commname|addressidcomm|1|罗湖小区1|1comm|2|罗湖小区2 ...
- 简析iOS动画原理及实现——Core Animation
本文转载至 http://www.tuicool.com/articles/e2qaYjA 原文 https://tech.imdada.cn/2016/06/21/ios-core-animati ...
- listView优化方案
1.如果自定义适配器,那么在getView方法中要考虑方法传进来的参数contentView是否为null,如果为null就创建contentView并返回,如果不为null则直接使用.在这个方法中尽 ...