Auth认证组件
Auth模块是什么
Auth模块是Django自带的用户认证模块
内置了强大的用户认证系统--auth,它默认使用 auth_user 表来存储用户数据
提供了对auth_user表的注册、登陆、认证、注销、修改密码等功能
auth模块常用方法
from django.contrib import auth from django.contrib.auth.models import User
1 创建用户
User.objects.create() # 密码是明文 User.objects.createuser() # 基本都用它 User.objects.createsuperuser() # 邮箱要给数据
# views def reg(request): if request.method == 'POST': username = request.POST.get('username') password = request.POST.get('password') User.objects.create_superuser(username=username,password=password,email='123@qq.com') return render(request, 'reg.html')
2 校验用户名和密码是否正确
auth.authenticate(username=username,password=password) # 用户名和密码两个一个都不能少
# views def login(request): if request.method == 'POST': username = request.POST.get('username') password = request.POST.get('password') user_obj = auth.authenticate(request, username=username, password=password) # 用户名密码正确返回的是用户对象 # 错误返回None if user_obj: auth.login(request, user_obj) # 只要执行了这一句话,之后在任意可以获取到request对象的地方 # 都可以通过request.user获取到当前登录的用户对象 return HttpResponse("登陆成功") return render(request, 'login.html')
3 保存用户登陆状态
auth.login(request,user_obj) # 这一句执行之后 request.user获取当前登录的用户对象
4 如何判断当前用户是否登录,以及如何获取当前登录用户对象
# views def get_user(request): print(request.user) # ka 登录用户对象 print(request.user.is_authenticated()) # True 判断是否登录 return HttpResponse('get_user')
5 校验用户是否登录
局部配置
# 校验用户是否登录装饰器 from django.contrib.auth.decorators import login_required @login_required(login_url='/login/')
# views from django.contrib.auth.decorators import login_required @login_required(login_url='/login/') def index(request): return HttpResponse('index页面')
全局配置
配置文件中写以下代码 LOGIN_URL = '/login/' @login_required def set_password(request)
如果两个都设置了 那么优先执行局部配置
6 修改密码
def set_password(request): if request.method == 'POST': old_password = request.POST.get('old_password') new_pwd = request.POST.get('new_password') # 先校验旧密码是否正确 is_right = request.user.check_password(old_password) # 再去修改密码 if is_right: request.user.set_password(new_pwd) request.user.save() return render(request, 'set_password.html')
7 注销功能
def logout(request): auth.logout(request) return HttpResponse('注销成功')
扩展auth_user
1 利用一对一表关系
2 利用类的继承
from django.contrib.auth.models import User, AbstractUser class Userinfo(AbstractUser): phone = models.BigIntegerField() mobile = models.CharField(max_length=11, unique=True) icon = models.ImageField(upload_to='icon', default='icon/default.png') # 扩展字段,尽量不要与原先表中的字段冲突
配置文件
AUTH_USER_MODEL = '应用名.表名' AUTH_USER_MODEL = 'drj_pro.User' MEDIA_BOOT = os.path.join(BASE_DIR, 'media') MEIDA_URL = '/media/'
django就会将新建的表来替换auth_user表
并且之前auth模块所有的功能不变 参照的也是userinfo表