Django之Auth插件

1、Auth 模块介绍

  django 内置的强大的用户登录认证模块,可以实现用户注册,用户登录,用户认证,注销,修改密码等功能。

2、Auth 模块使用

  使用命令行创建超级用户:python manage.py createsuperuser
  导入方式:from django.contrib import auth

  2.1 authenticate() 

    功能:提供用户认证功能,即验证用户名以及密码是否正确,一般需要username、password两个关键参数,如果认证成功,便返回一个user对象。

# 用法:
user = authenticate(username=username,password=password)
# 相当于
user = models.User.objects.filter(username=username,password=password).first()

print(user)
print(user.username)
print(user.password)

# 结果:
sun   # 原因定义了__str__方法
sun
密码是一串加密后的字符串

  2.2 login(HttpRequest, user)

    功能:该函数接收一个HttpRequest对象,以及一个经过认证得User对象。本质上会在后端为该用户生成相关session数据。

# 使用:
# 执行这句之后,可以通过request.user拿到user对象
user = authenticate(username=username,password=password)
auth.login(request, user)   # 操作session 记录

# 登录前
print(request.user)  # 得到AnonymousUser
# 登陆后
print(request.user)   # 得到User

# 为什么可以使用request.user拿到user对象?
# 在auth的中间建中,把session里的数据拿出来放到了request.user中

  2.3 logout(request)

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

def logout(request):
    auth.logout(request)

  2.4 is_authenticated()

    功能:用来判断当前请求是否通过认证。

if request.user.is_authenticated():
    pass

  2.5 login_required

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

from django.contrib.auth.decorators import login_required
      
@login_required(login_url="/login/")
def home(request):
    pass

# 没登陆会跳转到login页面,并且访问的页面路径变为/login/?next=/home/,
# 可以通过参数修改next键名:redirect_field_name="ReturnURL"

    若用户没有登录,则会跳转到django默认登录URL"/accounts/login",

    如果需要自定义登录的URL,也可以在settings.py文件中通过LOGIN_URL进行修改。如:

      LOGIN_URL = "/login/" 

  2.6 create_user()和create_superuser()

    功能:创建一个用户或超级用户,需要提供必要参数(username、password)等。

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

user = User.objects.create_superuser(username='用户名',password='密码',email='邮箱',...)
# 说明:创建超级用户时,必须添加上email

# 不推荐,原因:密码是明文,不能使用auth的验证方法
user = User.objects.create(username='用户名',password='密码')

  2.7 check_password() 和 set_password()

    功能:检查密码是否正确,修改密码

is_password = request.user.check_password('密码')


request.user.set_password(password='')
request.user.save()

  2.8 User 对象的属性

username: 用户名
password: 密码
is_staff: 用户是否拥有网站的管理权限.
is_active: 是否允许用户登录, 设置为 False,可以在不删除用户的前提下禁止用户登录

3、扩展默认的auth_user表

  可以通过继承内置的AbstractUser类,来定义一个自己的Model类,这样既能根据项目需求灵活的设计用户表,又能使用Django强大的认证系统。

from django.contrib.auth.models import AbstractUser
class UserInfo(AbstractUser):
    """
    用户信息表
    """
    nid = models.AutoField(primary_key=True)
    phone = models.CharField(max_length=11, null=True, unique=True)
    
    def __str__(self):
        return self.username

  相关配置:

    在settings.py文件配置,来告诉django使用自定新的UserInfo表

# 引用Django自带的User表,继承使用时需要设置
AUTH_USER_MODEL = "app名.UserInfo"

  注意:使用自定义表时,需要对整个数据库的表都得重新创建

 

posted @ 2019-05-01 12:02  yw_sun  阅读(296)  评论(0)    收藏  举报