赞
踩
由于http请求是无状态的,无法记录身份,所以需要一种机制能够长期的记录身份,最早出现的就是cookie。而cookie是由服务器下发给用户的,保存在用户的浏览器上面,用于校验身份的数据。
优点:
1.根本上解决了用户持续访问的问题
缺点:
1.由于cookie是保存在用户本地,容易被找到,所以导致一些安全问题
2.cookie可以被修改,还可以被模仿。
cookie,是通过response对象来操作,可以在response返回之前,通过 response.set_cookie来设置,这个方法有以下几个参数需要注意:
from django.http import HttpResponseRedirect response=HttpResponseRedirect('/index/') 创建cookie: response.set_cookie('name','hello') #键名和值 获取cookie name=request.COOKIES.get('name') 删除cookie(response不一定是前边的一个,只有调用HRR方法即可) 1.删除指定cookie response.delete_cookie('name') 2.删除多个cookie keys=request.COOKIIES.keys() for i in keys: response.delete_cookie(i)
在创建cookie的情况下
创建session
request.session['name']='name'
获取session
session_name=request.session.get('name')
删除session
del request.session["username"] ### 删除指定session,删除的是保存在服务器上面session的值
request.session.flush() ## 删除所有的session
这里我们用登录举例
views.py
# ---------------------------------------登录页面 def login(request): if request.method == 'POST':#判断前端是否使用post请求发送数据 email = request.POST.get('email')#获取前端数据 password = request.POST.get('password') error_msg = '' # 设置一个标记信息,反馈用户输入账号密码的可能出错提示 if email: #如果用户输入了邮箱,开始判断 user = LoginUser.objects.get(email=email)#从数据库查是否有存在的游戏 if user.password == password : # 密码成功跳转网页,并且设置cookie和session response = HttpResponseRedirect('/index/')#cookie需要response对象 response.set_cookie('email', email)l#设置cookie return response#返回响应 else:#如果密码错误,提示 error_msg = '密码错误!请重新输入!' else:#没输入邮箱而点击了登录 error_msg = '请输入账户后再登录!' return render(request, 'login.html', locals())
写一个登录装饰器
作用是来获取用户存入的cookie和session信息,以此为依据,在用户进入其他页面时候,每次使用装饰器进行判断,如果用户是登录进来的,则可以访问,如果用户是直接输入的网址进入,则会返回至登录页面
def LoginVaild(func):
#1.当我们在首页时,想要获取用户的用户名怎么获取?需要cookie,因此我们需要将用户登录的账户存入到 cookie和session中,因此上述登录的⑤为加入cookie
#2.取出cookie和session获取的用户名进行比较,成功跳转,失败则返回登录
def inner(request.*args,**kwargs):
username=request.COOKIES.get('username')
session_username=request.session.get('username')
if username and session_username and username==session_username:
return func(request,*args,**kwargs)
else:
return HttpResponseRedirect('/login/')
return inner
写一个登出页面,目的是为了删除cookie和session的存储信息,使用户退出后,不可直接进入页面
def logout(request):
# 删除cookie和session
response = HttpResponseRedirect('/login/') # 返回登录页
response.delete_cookie('email')#删除指定cookie
del request.session['email']#删除session
return response
配置路由
path('login/', login),
path('logout/', logout),
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。