首页 > 其他 > 详细

cookie与session

时间:2020-06-08 01:23:50      阅读:39      评论:0      收藏:0      [点我收藏+]

cookie

  服务端保存在客户端浏览器上的信息都可以称之为cookie,它的表现形式一般都是k:v键值对(cookie就是保存在客户端浏览器上的信息)

设置

#设置
    obj.set_cookie(key,value)
#获取
    request.COOKIES.get(key)
#超时
    obj.set_cookie(username, jason666,max_age=3,expires=3)
    
    max_age
    expires
        两者都是设置超时时间的 并且都是以秒为单位
        需要注意的是 针对IE浏览器需要使用expires
主动删除cookie(注销功能)

Cookie操作

# 视图函数的返回值
return HttpResponse()
return render()
return redirect()

# 操作cookie
obj1 = HttpResponse()
return obj1

obj2 = render()
return obj2

obj3 = redirect()
return obj3

例子:

def login_auth(func):
    def inner(request,*args,**kwargs):
        # print(request.path_info)
        # print(request.get_full_path())  # 能够获取到用户上一次想要访问的url
        target_url = request.get_full_path()
        if request.COOKIES.get(username):
            return func(request,*args,**kwargs)
        else:
            return redirect(/login/?next=%s%target_url)
    return inner

def login(request):
    if request.method == POST:
        username = request.POST.get(username)
        password = request.POST.get(password)
        if username == jason and password == 123:

            # 获取用户上一次想要访问的url
            target_url = request.GET.get(next)  # 这个结果可能是None
            if target_url:
                obj = redirect(target_url)
            else:
                # 保存用户登陆状态
                obj = redirect(/home/)
            # 让浏览器记录cookie数据
            obj.set_cookie(username, jason666)
            """
            浏览器不单单会帮你存
            而且后面每次访问你的时候还会带着它过来
            """
            # 跳转到一个需要用户登陆之后才能看的页面
            return obj
    return render(request,login.html)


@login_auth
def home(request):
    # 获取cookie信息 判断你有没有
    # if request.COOKIES.get(‘username‘) == ‘jason666‘:
    #     return HttpResponse("我是home页面,只有登陆的用户才能进来哟~")
    # # 没有登陆应该跳转到登陆页面
    # return redirect(‘/login/‘)
    return HttpResponse("我是home页面,只有登陆的用户才能进来哟~")

session

  数据是保存在服务端的并且它的表现形式一般也是k:v键值对(session就是保存在服务端上的信息)

设置

#设置
request.session[key] = value

#获取
request.session.get(key)

#过期时间
request.session.set_expiry()
    括号内可以放四种类型的参数
        1.整数        多少秒
        2.日期对象        到指定日期就失效
        3.0            一旦当前浏览器窗口关闭立刻失效
        4.不写        失效时间就取决于django内部全局session默认的失效时间(django默认session的过期时间是14天)

#清除
request.session.delete() 只删服务端的 客户端的不删
request.session.flush() 浏览器和服务端都清空)

例子:

from functools import wraps
def check_login(func):
    @wraps(func)
    def inner(request,*args,**kwargs):
        url = request.get_full_path()
        if request.session.get("name"):
            return func(request,*args,**kwargs)
        else:
            return redirect("/s_login/?next=%s"%url)
    return inner

def s_login(request):
    if request.method == "POST":
        name = request.POST.get("name")
        pwd = request.POST.get("pwd")
        if name == "jason" and pwd == "123":
            request.session["name"] = name
            url = request.GET.get("next")
            if url:
                return redirect(url)
            else:
                return redirect("/logout/")
    return render(request,"s_login.html")

@check_login
def get(request):
    return HttpResponse(123)


@check_login
def logout(request):
    request.session.flush()
    return HttpResponse("删除了")

CBV添加装饰器

装饰器的三种添加方法

# 方式1:指名道姓(给方法添加装饰器)
@method_decorator(login_auth) 

# 方式2:可以添加多个针对不同的方法加不同的装饰器
@method_decorator(login_auth,name=get)  
@method_decorator(login_auth,name=post)

# 方式3:dispatch会直接作用于当前类里面的所有的方法
@method_decorator(login_auth)  
    def dispatch(self, request, *args, **kwargs):
        return super().dispatch(request,*args,**kwargs)

例子:

from django.views import View
from django.utils.decorators import method_decorator

class MyLogin(View):
    def dispatch(self, request, *args, **kwargs):
        return super().dispatch(request,*args,**kwargs)
     @method_decorator(login_auth) 
    def get(self,request):
        return HttpResponse("get请求")

    def post(self,request):
        return HttpResponse(post请求)

 

cookie与session

原文:https://www.cnblogs.com/zhenghuiwen/p/13062695.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!