cookie的使用

cookie的使用:   (做爬虫就是修改cookie)
    设置cookie:
        -HttpResponse的对象 obj.set_cookie(key,value,超时时间)
        -obj.set_signed_cookie('name','egon',salt='123')
    取cookie:
        -request.COOKIES.get(key)
        -name=request.get_signed_cookie('name',salt='123')
    删除:
        HttpResponse的对象 obj.delete_cookie('is_login')


装饰器:
如果没有登陆,重定向到登陆页面,登陆成功后,再回到刚刚要访问的页面
def loginauth(func):
    def inner(request, *args, **kwargs):
        is_login = request.COOKIES.get('is_login')
        # 全路径
        url = request.get_full_path()
        # 只是路径部分
        # url=request.path
        if is_login:
            ret = func(request, *args, **kwargs)
            return ret
        else:
            return redirect('/login/?retrun=%s' % url)

    return inner

登陆:
def login(request):
    if request.method == 'GET':
        return render(request, 'login.html')
    else:
        if request.POST.get('name') == 'lqz' and request.POST.get('pwd') == '123':
#             # 往客户端浏览器写cookie
            url = request.GET.get('retrun')
            obj = redirect(url)
#             # obj=HttpResponse('ok')
#             # obj=render(request,'ddd.html')
            obj.set_cookie('name', 'lqz')
#             # obj.set_cookie('is_login', True,path='/order/')
            obj.set_cookie('is_login', True)

#             # max_age=None, expires=None, path='/',domain=None, secure=False, httponly=False

#             # max_age 过期时间,以秒为单位

#             # expires 也是过期时间,它是datetime类型对象,内部也把它转成了max_age
#             '''了解
#             path:指定访问某个路径的时候,才携带这个cookie

#             domain=None, Cookie生效的域名 你可用这个参数来构造一个跨站cookie。
#             如, domain=".example.com"所构造的cookie对下面这些站点都是可读的:
#             www.example.com 、 www2.example.com 和an.other.sub.domain.example.com 。
#             如果该参数设置为 None ,cookie只能由设置它的站点读取

#             secure=False, 浏览器将通过HTTPS来回传cookie
#             httponly=False 只能http协议传输,无法被JavaScript获取(不是绝对,底层抓包可以获取到也可以被覆盖)
#             '''
#             # obj.set_cookie('age','18',max_age=5)
            return obj
        else:
            return HttpResponse('用户名或密码错误')

 

渲染页面:

@loginauth
def order(request):
    if request.method == 'GET':
        name = request.COOKIES.get('name')
        return render(request, 'order.html', locals())

 

Cookie版登录校验:

def login_auth(func):
    def inner(request,*args,**kwargs):
        next_url=request.get_full_path()
        if request.COOKIES.get('is_login'):
            return func(request,*args,**kwargs)
        else:
            return redirect('cookie_login/?next=%s'%next_url)
    return inner
@login_auth
def cookie_order(request):
    return HttpResponse('我是订单页面')
@login_auth
def cookie_index(request):
    name=request.COOKIES.get('username')
    return render(request,'cookie_index.html',{'name':name})
def cookie_login(request):
    if request.method =='POST':
        next_url=request.GET.get('next')
        name=request.POST.get('name')
        password=request.POST.get('password')
        if name == 'lqz' and password == '123':
            import datetime
            now=datetime.datetime.now().strftime('%Y-%m-%d %X')
            print(now)
            obj=redirect(next_url)
            obj.set_cookie('is_login',True)
            obj.set_cookie('username',name)
            obj.set_cookie('login_time',now)
            return obj

    return render(request, 'cookie_login.html')
登录认证装饰器

 

 

获取Cookie:

request.COOKIES['key']
request.get_signed_cookie(key, default=RAISE_ERROR, salt='', max_age=None)

参数:

  • default: 默认值
  • salt: 加密盐
  • max_age: 后台控制过期时间

设置Cookie:

rep = HttpResponse(...)
rep = render(request, ...)

rep.set_cookie(key,value)
rep.set_signed_cookie(key,value,salt='加密盐')

参数:

  • key, 键
  • value='', 值
  • max_age=None, 超时时间 cookie需要延续的时间(以秒为单位)如果参数是\ None`` ,这个cookie会延续到浏览器关闭为止
  • expires=None, 超时时间(IE requires expires, so set it if hasn't been already.)
  • path='/', Cookie生效的路径,/ 表示根路径,特殊的:根路径的cookie可以被任何url的页面访问,浏览器只会把cookie回传给带有该路径的页面,这样可以避免将cookie传给站点中的其他的应用。
  • domain=None, Cookie生效的域名 你可用这个参数来构造一个跨站cookie。如, domain=".example.com"所构造的cookie对下面这些站点都是可读的:www.example.com 、 www2.example.com 和an.other.sub.domain.example.com 。如果该参数设置为 None ,cookie只能由设置它的站点读取
  • secure=False, 浏览器将通过HTTPS来回传cookie
  • httponly=False 只能http协议传输,无法被JavaScript获取(不是绝对,底层抓包可以获取到也可以被覆盖)

 

删除Cookie:

def logout(request):
    rep = redirect("/login/")
    rep.delete_cookie("user")  # 删除用户浏览器上之前设置的usercookie值
    return rep

 

 

posted @ 2019-01-20 21:30  萤huo虫  阅读(143)  评论(0)    收藏  举报