57.2 django auth模块
1.django auth 模块
auth模块 django用户相关的自带的功能模块 auth_user表 如何创建超级用户 createsuperuser 模块导入 from django.contrib import auth from django.contrib.auth.models import User auth方法大全 1.创建用户 如果使用UserInfo 继承AbsractUser 创建用户(注册) models.UserInfo.objects.create_user() User.objects.create() # 密码是明文 User.objects.createuser() # 基本都用它 User.objects.createsuperuser() # 邮箱要给数据 2.校验用户名和密码是否正确 auth.authenticate(username=username,password=password) # 用户名和密码两个一个都不能少 # 该方法当用户名和密码正确的时候返回的用户对象 不正确返回None 3.保存用户登录状态 auth.login(request,user_obj) # 这一句执行之后 request.user获取当前登录的用户对象 4.如何判断当前用户是否登录 以及如何获取当前登录用户对象 request.user.is_authenticated() # 判断是否登录 request.user # 登录用户对象 5.校验用户是否登录装饰器 from django.contrib.auth.decorators import login_required # 局部配置 @login_required(login_url='/login/') def xxx(request): return HttpResponse('xxx页面') # 全局配置 配置文件中写以下代码 LOGIN_URL = '/login/' @login_required def xxx(request): return HttpResponse('xxx页面') # 如果两个都设置了 那么优先执行局部配置 6.修改密码 request.user.check_password(old_password) # 校验原密码是否正确 request.user.set_password(new_password) request.user.save() # 一定要保存 7.注销功能 auth.logout(request) 如何扩展auth_user表 # 1 利用一对一表关系() # 2 利用类的继承 # 1 类的继承 from django.contrib.auth.models import User,AbstractUser # Create your models here. class Userinfo(AbstractUser): phone = models.BigIntegerField() avatar = models.FileField() # 扩展的字段 尽量不要与原先表中的字段冲突 # 2 配置文件 AUTH_USER_MODEL = '应用名.表名' """ django就会将userinfo表来替换auth_user表 并且之前auth模块所有的功能不变 参照的也是userinfo表 """
解释:
1.如何创建超级用户
用户密码默认密文
超级用户登录用户管理页面 可以管理所有注册的模型表
2.用户表管理(auth模块用法大全)
模块导入 from django.contrib import auth from django.contrib.auth.models import User
1.注册功能(创建用户)
User.objects.create() # 密码是明文 User.objects.createuser() # 基本都用它 User.objects.createsuperuser() # 邮箱要给数据
2.登录功能:效验密码是否正确,并保存用户状态 ,数据库保存session
def login(request): if request.method == 'POST': username = request.POST.get('username') password = request.POST.get('password') # 明文 # 数据库校验用户名和密码是否正确 # User.objects.filter(username=username,password=password) user_obj = auth.authenticate(request,username=username,password=password) """ 用户名密码正确返回的是用户对象 错误返回None """ if user_obj: # 保存用户登录状态 # request.session auth.login(request,user_obj) """ 只要执行了这一句话 之后在任意可以获取到request对象的地方 都可以通过request.user获取到当前登录的用户对象 """ return HttpResponse("登录成功") return render(request,'login.html')
3.如何判断用户是否登录:1.先登录:auth.login(request,user_obj) 2. 判断用户是否登录: request.user.isauthenticated()
3. request.user 获取的是用户对象
返回的是布尔类型
3
3.校验用户是否登录装饰器
@login_required(login_url='/login/') url 为没有登陆时跳转的页面 思考 cbv如何装饰
from django.contrib.auth.decorators import login_required # 局部配置 @login_required(login_url='/login/') def xxx(request): return HttpResponse('xxx页面') # 全局配置 配置文件中写以下代码 LOGIN_URL = '/login/' @login_required def xxx(request): return HttpResponse('xxx页面') # 如果两个都设置了 那么优先执行局部配置
4.修改密码:1.先校验旧密码是否正确,2.设置新密码, 3.保存
修改密码 request.user.check_password(old_password) # 校验原密码是否正确 request.user.set_password(new_password) request.user.save()
5.注销功能:session表中 记录删除
@login_required def logout(request): auth.logout(request) return HttpResponse('注销成功')
2.user表扩展(既想使用原有表的功能,又想扩展字段) auth所有的功能不受影响
1.继承abstract表 2. 配置文件告诉django AUTH_USER_MODEL = '应用名.表名'
继承abstractuser表
与user创建用户区别 如果使用UserInfo 继承AbsractUser 创建用户(注册) models.UserInfo.objects.create_user()
如何扩展auth_user表 # 1 利用一对一表关系() # 2 利用类的继承 # 1 类的继承 from django.contrib.auth.models import User,AbstractUser # Create your models here. class Userinfo(AbstractUser): phone = models.BigIntegerField() avatar = models.FileField() # 扩展的字段 尽量不要与原先表中的字段冲突 # 2 配置文件 AUTH_USER_MODEL = '应用名.表名' """ django就会将userinfo表来替换auth_user表 并且之前auth模块所有的功能不变 参照的也是userinfo表 """
解释: 查看user表源码 user表继承abstractuser
创建自定义扩展表
1.在models模块中 继承abstract,通过models.FileField() 形式创建
from django.db import models from django.contrib.auth.models import User,AbstractUser # Create your models here. class Userinfo(AbstractUser): phone = models.BigIntegerField() avatar = models.FileField() # 扩展的字段 尽量不要与原先表中的字段冲突
2.在配置文件中告诉django 现在不用默认的user表了,写上新建的表的路径