Django项目 Session的基本使用

 删除session:

def logout(request):
# request.session.delete() 只删除session数据
request.session.flush() #删除session数据和cookie值
return redirect("/login/")

views.py文件修改:

#获取session:
from functools import wraps
#Django提供的工具,将函数装饰器转变为类装饰器
from django.utils.decorators import method_decorator


def check_login(func):
@wraps(func) #装饰器修复技术
def inner(request,*args,**kwargs):
ret= request.session。get("is_login") #获取session:

if ret== "1":
return func(request,*args,**kwargs)
else:
next_url =request.path_info
return redirect("/login/?next={}".format(next_url))
return inner

#设置session

from django.views.decorators.csrf import csrf_exempt,csrf_protect
#csrf_exempt 指定某一个函数不做csrf校验

csrf_protect 指定某一个函数做csrf校验

@csrf_exempt #在方法上面添加@csrf_exempt 表示不校验 csrf
def login(request):
    if request.method == "POST":
user = request.POST.get("user")
password = request.POST.get("pwd")
# 从url中获取到next参数
next_url = request.GET.get("next") 这是在post请求中 获取get请求的数据 所以要在修改html的action信息
print(next_url)
if user == "alex" and password == "123456":
if next_url: #如果有next_url 就跳转到next_url页面
ret=redirect(next_url)
else: #没有就跳转到home页面
ret = redirect("/home/")
# ret.set_cookie("is_login","1") 这是设置不加盐的cookie
# 设置加盐的cookie
ret.session["is_login"]="1" #设置session
return ret
return render(request,"login.html")

@method_decorator(check_login name="get")   #这是写在类上的

class UserInfo(views.View):
    @method_decorator(check_login)  #这是写在方法上的
def get(self,request):
reture render(request,"userinfo.html")

补充:session中的数据是放在数据库中的,在Django项目中,初始化一下 (makemigrateions, migrate) 会自动生成一个session表

将所有session失效日期小于当前日期的数据删除:
request.session.clear_expired()

设置会话session和cookie的超时时间
request.session.set_expiry(value)
value 为整数: 即 整数秒后失效
value为 0 关闭浏览器就失效

每一次请求都更新cookie的有效时间
在settings.py文件中设置:
SESSION_SAVE_EVERY_REQUEST = True



posted @ 2022-04-06 22:43  张丶先森  阅读(164)  评论(0)    收藏  举报