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

浙公网安备 33010602011771号