用户认证组件

介绍

使用Django自己的模型类实现用户认证,Django已经封装使用起来非常方便,使用前需要导入from django.contrib.auth.models import User

注册案例

def register_user(request):

    if request.method == "GET":
        return render(request,"userauth/login_user.html")
    else:
        user = request.POST.get("user")
        pwd = request.POST.get("pwd")
        # 自动对密码加密
        User.objects.create_user(username=user,password=pwd)
        # 超级用户
        # User.objects.create_superuser(username=user,password=pwd,email=email)
        return redirect("/userauth/login")

登录


def login(request):

    if request.method == "GET":
        return render(request,"userauth/login.html")

    else:
        user = request.POST.get("user")
        pwd = request.POST.get("pwd")
        try:
            # 将输入的密码加密后取认证,验证成功返回一个对象,失败返回None
            user = auth.authenticate(username=user, password=pwd) 
            print("user",user)
            if user:
                # request.session["user_id"] = User
                # 下面的方法可以直接实现session
                auth.login(request, user)
                return redirect("/userauth/index/")
            else:
                return redirect("/userauth/login/")

        except Exception as e:
            print("user2", user)
            return redirect("/userauth/login/")

首页

def index(request):

    # request.user:当前用户的对象
    # 在AuthenticationMiddleware的process_request方法中
        # 1. user_id = request.session.get("user_id")
        # 2. User.objects.get(pk=user_id)

    # 总结 在任何视图函数中都可以使用request.user
     # 如果之前登录成功过,执行了auth.login(),那么reqyest.user=登录对象,否则为空

    if request.user.id:
        return render(request, 'userauth/index.html',{"user":"zzz"})
    else:
        return redirect("/userauth/login/")

退出登录

def logout(request):

    auth.logout(request)
    return redirect("/userauth/login/")
posted @ 2023-02-11 09:41  zhq9  阅读(9)  评论(0编辑  收藏  举报