之前我们在进行用户校验的时候,总是从数据库中获取数据,然后再进行对比,就像如下这样:

def login(request):
    if request.method == "POST":
        user = request.POST.get("user")
        pwd  = request.POST.get("pwd")
        ret = models.user_info.objects.filter(user=user,pwd=pwd)
        if ret:
            request.session["user"] = user
            return redirect("/index/")
    return render(request,"login.html")

现在Django提供了一种另一种认证方式,基于auth组件。

from django.contrib import auth
def log_in(request):
    user = request.POST.get("user")
    pwd = request.POST.get("pwd")
    #验证成功,返回user对象,否则返回None
    user = auth.authenticate(username=user,password=pwd)
    if user:
        auth.login(request,user)
        #登录成功之后,在django_session之中会生成一条相应的信息
        #下次访问页面的时候就不需要登录了
        return redirect("/index/")

    return render(request,"log_in.html")


def index(request):
    print(request.user)
    print(type(request.user))
    #如果不能能够获取到user这个sessionid,就会跳转
    # if not request.user.id:
    #     return redirect("/log_in/")
    user = request.user
    if not user.is_authenticated():
        return redirect('/log_in/')
    return render(request,"index.html",locals())


def log_out(request):
    auth.logout(request)
    return redirect("/log_in/")
auth用户认证

相关文章: