原始Session 登录验证

from django.db import models
# Create your models here.

class User(models.Model):
    username = models.CharField(max_length=16)
    password = models.CharField(max_length=32)
from django.shortcuts import render, redirect, HttpResponse
from django.contrib import auth
from app01 import models
from functools import wraps


def check_login(f):
    @wraps(f)
    def inner(request, *args, **kwargs):
        if request.session.get("is_login") == "1":
            return f(request, *args, **kwargs)
        else:
            return redirect("/login/")
    return inner


def login(request):
    if request.method == "POST":
        username = request.POST.get("username")
        password = request.POST.get("password")

        user = models.User.objects.filter(username=username, password=password)  # [User Obj, ]
        if user:
            # 登陆成功
            request.session["is_login"] = "1"
            # request.session["username"] = username
            request.session["user_id"] = user[0].id
            # 1. 生成特殊的字符串
            # 2. 特殊字符串当成key,在数据库的session表中对应一个session value
            # 3. 在响应中向浏览器写了一个Cookie Cookie的值就是 特殊的字符串

            return redirect("/index/")

    return render(request, "login.html")


@check_login
def index(request):
    user_id = request.session.get("user_id")
    # 根据id去数据库中查找用户
    user_obj = models.User.objects.filter(id=user_id)
    if user_obj:
        return render(request, "index.html", {"user": user_obj[0]})
    else:
        return render(request, "index.html", {"user": "匿名用户"})


def login(request):
    if request.method == "POST":
        username = request.POST.get("username")
        pwd = request.POST.get("password")
        # 如何判断用户名和密码对不对
        user = auth.authenticate(username=username, password=pwd)
        if user:
            ret = user.is_authenticated()
            print(ret)
            print("-" * 120)

            # 将登录的用户封装到request.user
            auth.login(request, user)
            return redirect("/index/")
    return render(request, "login.html")

猜你喜欢

转载自blog.csdn.net/weixin_42506747/article/details/81916084
今日推荐