用户认证组件
介绍
使用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/")