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. 运行jsp常犯的错误

    error 未启动tomcat服务 tomcat端口是否已改动 404: 未部署web应用 运行时URL输入错误 检查文件的存放位置(存放文件的目录无法对外引用,如WEB-INF , META-INF ...

  2. Linux安装bundle

    安装bundle文件的方法: cd 到文件目录再用sudo chmod +x XXXXXXX.bundle 加权限最后 ./XXXXXXXX.bundle 就行了. 第一步:sudo chmod +x ...

  3. spring boot整合activemq消息中间件

    spring boot整合activemq消息中间件 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi ...

  4. ajax传JSON时设置的contenttype导致JAVA中request.getParameter("")怎么也接收不到数据

    ajax传JSON时设置的contenttype默认值是application/x-www-form-urlencoded, 当ajax传JSON时设置的contenttype 如果是applicat ...

  5. [Scikit-learn] 2.5 Dimensionality reduction - ICA

    理论学习: 独立成分分析ICA历史 Ref: Lecture 15 | Machine Learning (Stanford) - NG From: https://wenku.baidu.com/v ...

  6. 恶劣条件下的apache配置(Linux)

    (本文出自yangjj ^_^)   前提:1.没联网,yum挂.2.至少要有GCC,要不玩个屁. 3.你有充足的咖啡并且有几个小时时间不想打dota. 4.你要做集群. 以上条件不满足其一,看到这里 ...

  7. NetBpm 目录

    整理了一下网上的一些netbpm,虽然这项目现在不再更新了,还是想去学习一下,这个组件用时候很方便,比workFlow方便的多了 如果像jbpm那样一直更新就好了. 前两篇是个人的一个总结,后面一些是 ...

  8. WinInet API详解

    一.概述 WinInet(「Windows Internet」)API帮助程序员使用三个常见的Internet协议,这三个协议是:用于World Wide Web万维网的超文本传输协议(HTTP:Hy ...

  9. Ansible 管理任务计划

    ansible 使用 cron 模块来管理任务计划: [root@localhost ~]$ ansible 192.168.119.134 -m cron -a "name='test c ...

  10. 顶点纹理shader

    Shader "Custom/VertDisplace" { Properties { _MainTex ("Base (RGB)", 2D) = " ...