Django学习小记-cookie
有没有发现我们即使做了登陆框login界面,但别人还是可以通过知道URL就可以访问站点!
这是因为缺少cookie
def set_cookie(self, key, value=‘‘, max_age=None, expires=None, path=‘/‘,
domain=None, secure=False, httponly=False, samesite=None):
"""
Set a cookie.
``expires`` can be:
- a string in the correct format,
- a naive ``datetime.datetime`` object in UTC,
- an aware ``datetime.datetime`` object in any time zone.
If it is a ``datetime.datetime`` object then calculate ``max_age``.
"""
#max_age是多少秒后失效
#expire是间隔多久后失效,同max_age;建议用max_age
#path=‘/‘ 默认所有下url共用该cookie ,也可指定只有特定url使用cookie
#domain是一二级域名是否可共用cookie
#secure与https有关,若用https则改值设置为True
#httponly安全相关,只有http来回发请求的时候才能用,通过js代码无法获取到。我们修改login和index函数添加cookie验证:
#登陆
def login(request):
if request.method == "GET":
return render(request,‘login.html‘)
else:
#用户POST提交的数据
user = request.POST.get(‘user‘)
pwd = request.POST.get(‘pwd‘)
if user == ‘admin‘ and pwd ==‘123‘:
obj = redirect(‘/index/‘)
obj.set_cookie(‘ticket‘,‘asasasasasaas‘,max_age=3600) #下面这个就是带签名的cookie
#obj.set_signed_cookie(‘ticket‘,‘asasasasasaas‘,salt=‘shannon‘)
return obj
else:
return render(request,‘login.html‘)
#主页
def index(request):
#去请求的cookie中找凭证;有明文的和带签名的两种方式
tk = request.COOKIES.get(‘ticket‘)
#tk = request.get_signed_cookie(‘ticket‘,salt=‘shannon‘)
if not tk:
return redirect(‘/login/‘)
else:
#去数据库获取数据
secfile_list = sqlheper.get_list("select id,CaseName,CaseType,Level,Cause,Result from anfu",[])
return render(request,‘index.html‘,{‘secfile_list‘:secfile_list})-还可以自定义cookie签名
-可用装饰器装饰views中的函数