Django的用户认证组件
用户认证:
auth模块:
from django.contrib import auth
1.1 authenticate()
提供了用户认证,如果认证信息有效,会返回一个User对象。
user = auth.authenticate(username=user,password = pwd) # 用户验证:成功则返回user对象,否则返回None
1.2 login(request,user):
该函数接收一个HttpRequest对象,以及一个认证了的user对象,此函数使用django的session框架给某个已认证的用户附加上sessionid 等信息。
from django.contrib import auth def login(request): if request.method == "POST": user = request.POST.get("user") pwd = request.POST.get("pwd") user = auth.authenticate(username=user,password = pwd) # 用户验证:成功则返回user对象,否则返回None if user: auth.login(request,user) # 这一步相当于登陆成功后,注册session, return redirect("/index/") return render(request,"login.html")
1.3 logout(request) 注销用户
def logout(request): auth.logout(request) # 注销 return redirect("/login/")
该函数接收一个HttpRequest对象,无返回值,当调该函数时,当前请求的session信息会全部清除,该用户即使没有登陆,使用该函数也不会报错。
User对象:
User对象属性:username,password(必填项),password用哈希算法保存到数据库。
2.1 User对象的 is_authenticated:
如果是真正的 User 对象,返回值恒为 True 。 用于检查用户是否已经通过了认证。
通过认证并不意味着用户拥有任何权限,甚至也不检查该用户是否处于激活状态,这只是表明用户成功的通过了认证。 这个方法很重要, 在后台用request.user.is_authenticated判断用户是否已经登录,如果true则可以向前台展示request.user.name
要求:
1 用户登陆后才能访问某些页面,
2 如果用户没有登录就访问该页面的话直接跳到登录页面
3 用户在跳转的登陆界面中完成登陆后,自动访问跳转到之前访问的地址
注意:
在django1.1以后,is_authenticated 由方法(即 is_authenticated) 变成了静态方法即(is_authenticate) 就可以调用了。
def index(request): print(request.user.id) print(request.user.username) if not request.user.is_authenticated: return redirect("/login/") return render(request,"index.html")
2.2,创建用户:
def register(request): User.objects.create_user(username="egon",password=123) User.objects.create_superuser(username='yuan',password=123) # create_user 创建普通用户 # create_superuser 创建超级用户 return redirect("/login/")