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表了。

猜你喜欢

转载自www.cnblogs.com/Alexephor/p/11310486.html