22.Django自带的用户认证系统

Django自带的用户认证系统

开发网站或者任何系统不可避免会有用户注册、用户登录、用户认证、注销、修改密码等功能。 Django作为一个全能的框架已经为我们做好了一切。

auth模块

from django.contrib import auth

auth模块里面已经提供了很多,使用的方法。

auth.authenticate()

提供了用户认证功能, 验证用户名及密码是否正确。

auth.authenticate(request, username='name', password='password')

如果认证成功,即用户名和密码匹配,将返回一个User对象,否则返回None

登录: user 必须是经过认证的,即authenticate的返回值

auth.login(request, user)

示例:

from django.contrib.auth import authenticate, login

def my_view(request):
  username = request.POST['username']
  password = request.POST['password']
  user_obj = authenticate(username=username, password=password)
  if user_obj:
    login(request, user_obj)
    # 认证成功 做其他事情
  else:
    # 认证失败

当login成功后,request.user就赋值了,否则是个匿名用户。

登出:

logout(request)

当调用该函数时,当前请求的session信息会全部清除。该用户即使没有登录,使用该函数也不会报错。

from django.contrib.auth import logout

def logout_view(request):
  logout(request)
  # Redirect to a success page.
  # 转发到其他页面

判断是否认证过:

is_authenticated()

用来判断当前请求是否通过了认证。

def my_view(request):
  if not request.user.is_authenticated():
    return redirect('%s?next=%s' % (settings.LOGIN_URL, request.path))

给视图添加认证要求:

login_requierd

auth 给我们提供的一个装饰器工具,用来快捷的给某个视图添加登录校验。

from django.contrib.auth.decorators import login_required

@login_required
def my_view(request):
   # 业务

如果用户没有登录将会跳转到setting.py中设置的登录页面

LOGIN_URL = '/login/'  #

也可以在装饰器上设置要跳转的页面

@login_required(login_url='login')

创建用户:

create_user()
from django.contrib.auth.models import User
user = User.objects.create_userusername='用户名',password='密码',email='邮箱',...

创建超级用户:

create_superuser()

auth 提供的一个创建新的超级用户的方法,需要提供必要参数(username、password)等。

from django.contrib.auth.models import User
user_obj = User.objects.create_superuserusername='用户名',password='密码',email='邮箱',...

校验密码:

check_password(raw_password)

auth 提供的一个检查密码是否正确的方法,需要提供当前请求用户的密码。

密码正确返回True,否则返回False。

ok = user_obj.check_password('密码')

或者直接针对当前请求的user对象校验原密码是否正确:

ok = request.user.check_password(raw_password='原密码')

设置密码:

set_password(raw_password)

auth 提供的一个修改密码的方法,接收 要设置的新密码 作为参数。 设置完一定要调用用户对象的save方法.

默认的user是在auth_user表中,但是有可能不满组我们的需求,那就需要自定义类了。 我们继承AbstractUser设置自己的user

from django.contrib.auth.models import AbstractUser
class User(AbstractUser):

    phone = models.CharField(max_length=11, null=True, unique=True)
    address = models.CharField()

    def __str__(self):
        return self.username

然后在setting.py中告诉Django默认用户有改动。

AUTH_USER_MODEL = "app名.User"

如果我们修改了默认user后面的操作都需要使用新的user, 而且要在数据库中创建该表

声明:原创文章,版权所有,转载请注明出处,https://litets.com。