原始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")

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值