cookie和session

发布时间 2023-08-09 19:22:30作者: 凡人半睁眼

一、

 

 

 

二、

 

 

 

 

 

三、基于cookie的登录功能,用户名和密码从数据表中读取!

1、html 简单的登录页面

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <link href="https://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/3.3.6/css/bootstrap.min.css" rel="stylesheet">
    <script src="https://cdn.staticfile.org/jquery/2.1.1/jquery.min.js"></script>
    <script src="https://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/3.3.6/js/bootstrap.min.js"></script>
</head>
<body>
<h1>这里是登录页面</h1>
<br>
<form action="" method="post" enctype="application/x-www-form-urlencoded">
    username:<input type="text" name="username">
    <br>
    <br>
    password:<input type="password" name="password">
    <br>
    <br>
    提交:<input type="submit">
</form>
</body>
</html>

2、views 后端处理逻辑

验证登录页面、给主页加上认证装饰器。当cookie过期,访问主页自动跳转到登录页面。

#  登录页面
def login(request):
    if request.method == 'POST':
        # 从前端获取用户输入的帐号密码
        username = request.POST.get('username')
        password = request.POST.get('password')

        # 读取数据库中的账号密码
        user_obj = models.User.objects.filter(name=username, password=password).first()
        print(user_obj)
        if user_obj:
            print('登录成功!')
            # 保存用户的信息,使用cookie保存
            obj = redirect('/home/')
            obj.set_cookie('username', user_obj.name, max_age=10)
            return obj
    return render(request, 'login.html')

# 登录认证装饰器
def login_auth(func):
    def inner(request, *args, **kwargs):
        if request.COOKIES.get('username'):
            return func(request, *args, **kwargs)
        else:
            return redirect('/login/')

    return inner

# 主页加上登录认证装饰器
@login_auth
def home(request):
    '''访问这个home页面,必须登录之后才能范围,否则不让访问?'''
    # 判断用户是否登录了?
    # 就是判断是否有cookie
    # print(request.COOKIES.get('username'))
    # if request.COOKIES.get('username'):
    #     return HttpResponse("登录之后才能看到我哦")
    # else:
    #     return redirect('/login/')
    return render(request, 'home.html')

注意⚠️:

1. obj.set_cookie('username', user_obj.name, max_age=10) 

max_age=10是设置cookie 10秒过期

2. 查看cookie保存的值