Django之auth组件
auth模块
概述:
开发一个网站的时候,是肯定要设计实现网站的用户系统。此时需要我们自己实现登录、认证、注销、修改密码等操作,django它内置了用户认证系统auth。
1 from django.contrib import auth
auth中方法:
authenticate()
认证当前用户
1 user = authenticate(username='sb',password='123456')
login(HttpRequest, user)
该函数接受一个HttpRequest对象,以及一个经过认证的User对象。
该函数实现一个用户登录的功能。它本质上会在后端为该用户生成相关session数据。
1 from django.contrib.auth import authenticate, login 2 3 def my_view(request): 4 username = request.POST['username'] 5 password = request.POST['password'] 6 user_obj = authenticate(username=username, password=password) 7 if user_obj: 8 login(request, user_obj) 9 # Redirect to a success page. 10 ... 11 else: 12 # Return an 'invalid login' error message. 13 ...
注意:只要使用login(request, user_obj)之后,request.user就能拿到当前登录的用户对象。否则request.user得到的是一个匿名用户对象(AnonymousUser Object)。
logout(request)
该函数接受一个HttpRequest对象,无返回值。
当调用该函数时,当前请求的session信息会全部清除。该用户即使没有登录,使用该函数也不会报错。
1 from django.contrib.auth import logout 2 3 def logout_view(request): 4 logout(request) 5 # Redirect to a success page.
is_authenticated()
判断当前请求是否通过认证
1 def my_view(request): 2 if not request.user.is_authenticated(): 3 return redirect('%s?next=%s' % (settings.LOGIN_URL, request.path))
login_requierd()
auth 给我们提供的一个装饰器工具,用来快捷的给某个视图添加登录校验
1 from django.contrib.auth.decorators import login_required 2 3 @login_required 4 def my_view(request): 5 ...
若用户没有登录,则会跳转到django默认的 登录URL '/accounts/login/ ' 并传递当前访问url的绝对路径 (登陆成功后,会重定向到该路径)。
如果需要自定义登录的URL,则需要在settings.py文件中通过LOGIN_URL进行修改。
create_user()
from django.contrib.auth.models import User user = User.objects.create_user(username='用户名',password='密码',email='邮箱',...)
create_superuser()
from django.contrib.auth.models import User user_obj = User.objects.create_superuser(username='用户名',password='密码',email='邮箱',...)
check_password(raw_password)
auth 提供的一个检查密码是否正确的方法,需要提供当前请求用户的密码。
密码正确返回True,否则返回False。
set_password(raw_password)
auth 提供的一个修改密码的方法,接收 要设置的新密码 作为参数。
注意:设置完一定要调用用户对象的save方法!!!
1 user_obj.set_password('123456') 2 user_obj.save()
自定义auth_user表
1 from django.contrib.auth.models import AbstractUser 2 class UserInfo(AbstractUser): 3 """ 4 用户信息表 5 """ 6 nid = models.AutoField(primary_key=True) 7 phone = models.CharField(max_length=11, null=True, unique=True) 8 9 def __str__(self): 10 return self.username
在settings配置
1 # 引用Django自带的User表,继承使用时需要设置 2 AUTH_USER_MODEL = "app01.UserInfo"
自定义好了我们当然可以使用表了
普通用户:
1 UserInfo.objects.create_user(nid=1, password=123456)
超级用户:
1 UserInfo.objects.create_superuser(nid=1, password=123456)
注意:
一旦我们指定了新的认证系统所使用的表,我们就需要重新在数据库中创建该表,而不能继续使用原来默认的auth_user表了。