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"
注意:使用自定义表时,需要对整个数据库的表都得重新创建

浙公网安备 33010602011771号