一、cookie
cookie:客户端浏览器上的一个文件(类似字典,键值对形式存在),换电脑或者换浏览器都不生效
1、基于cookie做用户验证
1 user_info={ 2 "test":{"pwd":"test"}, 3 "chen":{"pwd":"chen"}, 4 5 } 6 def login_test(request): 7 if request.method=="GET": 8 return render(request,"index_login.html") 9 if request.method=="POST": 10 u=request.POST.get("username") 11 p=request.POST.get("password") 12 print(u,p) 13 if not user_info.get(u): 14 return render(request,"index_login.html") 15 if user_info.get(u)["pwd"]==p: 16 #验证正确,返回cookie和跳转 17 res=redirect("/index/") 18 res.set_cookie("username",u) 19 return res 20 else: 21 return redirect("/login_test/") 22 23 def index(request): 24 v=request.COOKIES.get("username") 25 if not v: 26 return redirect("/login_test/") 27 return render(request,"index.html",{"current_user":v})
2、cookie的参数
1 def cookie(request): 2 #获取cookie 3 request.COOKIES.get("username") 4 request.COOKIES["username"] 5 6 #发送cookie到客户端,关闭浏览器失效 7 u=123 8 res="redirect('/index/')" 9 10 res.set_cookie("username",u) 11 12 13 #其他参数 14 #设置超时时间: 15 #超时时间,失效max_age(多少秒之后失效) 16 res.set_cookie("username", "value",max_age=10) 17 #超时时间,失效expires(到什么时间点失效) 18 import datetime 19 current_date=datetime.datetime.utcnow() 20 print(current_date) 21 current_date=current_date+datetime.timedelta(seconds=5) 22 res.set_cookie("username", "value", expires=current_date) #5秒之后失效 23 24 #path="/" cookie生效的路径,/路径下的可以被所有url访问,如设置/index,只能被/index的url访问 25 26 27 return res
设置cookie是密文形式:带签名的cookie:
设置:
res.set_signed_cookie("username","chen",salt="sdfadf")
获取:
request.get_signed_cookie("username",salt="sdfadf")
3、利用装饰器完成用户验证
FBV:
CBV:
只对其中的一个请求做用户验证:(不能直接加)
对所有的函数做验证: