Auth 组件 [ 登录认证 ]
Django为开发者提供了一套可以完成用户注册、登录、登录校验、登录信息保存、密码的密文存储等一系列功能的模块
auth_user 表(django内置的user表)
from django.contrib.auth.models import User
# 创建用户:
User.objects.create_user(username="lxx",password="123") # 创建普通用户
User.objects.create_superuser(username="lxx",password="123",email=false) # 创建超级用户
# 修改密码:(django自己对密码进行了加密)
user = User.objects,first()
user.set_password("000")
user.save
# 校验密码:
user = User.objects.first()
user.check_password("000") # django自己去数据库校验
在django内置的user表上扩展功能,扩展完以后用自己的User表
# 方法一:写一个表跟django内置的表一对一(一般不用)
eg:
class user(model.Models):
id = models.AutoField(primary_key=True)
username = models.OneToOneField(to=User,to_field="username",null=True,)
info = models.TextField()
# 方法二:写一个表继承 AbstractUser 类(推荐)
from django.contrib.auth.models import AbstractUser
class user( AbstractUser ): # 原有的表里有的属性,我现在都有
info = models.TextField(null=True)
# settings.py配置
AUTH_USER_MODEL = 'app.User'
![](https://img2018.cnblogs.com/blog/1445702/201903/1445702-20190314083424983-1547218416.png)
Auth组件登陆校验
from django.contrib.auth.models import User
from django.contrib import auth
# 校验字段用户名,密码,返回user对象
user_obj = auth.authenticate(username="lxx",password="123"),存入浏览器Cookie,
# 登陆用户
auth.login(request,user_obj) # 保存登陆状态,生成随机字符串,写入session
# 注销用户
auth.logout(request)
# 检验是否是登陆状态:
登陆完以后django自己把user表对象封装到 request 里面
去查django内置的User表里的字段
request.user.is_authenticated() # 查看是否是登陆状态
Auth组件登陆认证装饰器
from django.contrib.auth.decorators import login_required
# 装饰器的页面返回的 key是next:
/user_login/?next=/user_order/ # 默认的
# redirect_field_name="return_url"修改装饰器的 key值,
/user_login/?return_url=/user_order/ # 修改完以后的
@login_required(login_url='/user_login/' ,redirect_field_name="return_url") # 登陆认证 login_url='/user_login/' 表示未登陆走向的路由
def user_home(request):
return render(request,'user.html',locals())