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的更多相关文章

  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. 在mvc4中多语言建站的实例

    环境:vs2012 asp.net mvc4. 实现方式:resource 资源文件,根据路由规则中Lang参数来判断载入哪种语言方式 在网上找到了相关资料,顺便自己做了个练习,新建工程之类的步骤就免 ...

  2. JSP转发和重定向的区别

    重定向: response.sendRedirect("地址");         a. 页面地址显示最终页面         b. 不可向后传递参数         c. 跳到外 ...

  3. linux环境中安装iotop命令,解决-bash: iotop: command not found问题

    需求描述: 今天在测试环境中,准备查看mysql各个线程占用的io的情况,准备使用iotop命令来查看,发现没有这个命令 [root@testvm Packages]# iotop -bash: io ...

  4. oracle sqlplus常用命令大全

    show和set命令是两条用于维护SQL*Plus系统变量的命令 SQL> show all --查看所有68个系统变量值 SQL> show user --显示当前连接用户 SQL> ...

  5. jdbc数据访问技术

    jdbc数据访问技术 1.JDBC如何做事务处理? Con.setAutoCommit(false) Con.commit(); Con.rollback(); 2.写出几个在Jdbc中常用的接口 p ...

  6. iOS NSError

    写在前面 在iOS开发中,NSError的使用非常常见,使用也比较简单,也正因为简单,所以对这一部分知识不甚注重.但是近期在做app底层网络封装时发现了一些问题.我使用的网络框架是AFNetworki ...

  7. Waf-Bypass-Learning

    WAF Bypass 综合篇: WAF攻防研究之四个层次Bypass WAF Bypass WAF Cookbook - MayIKissYou My Waf Bypass Series Articl ...

  8. Java类文件结构

    一.概述 实现语言无关性的基础是虚拟机和字节码存储格式.Java虚拟机不和包括Java在内的任何语言绑定,只与"Class文件"这种特定的二进制文件所关联,Class文件中包含了J ...

  9. Delphi中ClientDataSet的用法小结

    Delphi中ClientDataSet的用法小结 TClientDataSet控件继承自TDataSet,其数据存储文件格式扩展名为 .cds,是基于文件型数据存储和操作的控件.该控件封装了对数据进 ...

  10. 【Spring Boot && Spring Cloud系列】那些Spring Boot中踩过的坑

    一.不连接数据库启动springboot报错 Cannot determine embedded database driver class for database type NONE 原因:Spr ...