Django做为一个完美主义者的终极框架,它内置了强大的用户认证系统--auth,执行数据库迁移的那两条命令时,即便咱们没有建表,它默认帮咱们建立auth_user 表来存储用户数据。html
在modles.py
建立表单模型能够对AbstractUser
进行继承。由于咱们能够从源码中看出来 Auth 自带的auth_user表继承AbstractUser
类,全部咱们能够一样继承它,而后对于他的内容进行自定义数据库
AbstractUser
自带的字段django
username :帐号
first_name:姓
last_name:名
email:邮箱
is_staff : 用户是否拥有网站的管理权限.
is_active: 是否容许用户登陆, 设置为 False,能够在不删除用户的前提下禁止用户登陆。
date_joined:建立日期
1.类的继承后端
from django.contrib.auth.models import User,AbstractUser class Userinfo(AbstractUser): #扩展字段 phone = models.BigIntegerField() #扩展的字段尽可能不要与原先表中字段冲突
2.配置文件settings.pysession
AUTH_USER_MODEL = '应用名.表名'
'''
配置后django会将Userinfo表来替换默认自带的auth_user表
'''
建立超级用户框架
咱们能够在pycharm中使用导航栏中的Tools里的run manage.py Task 中输入createsuperuser
ide
create_user()网站
auth 提供的一个建立新用户的方法,须要提供必要参数(username、password)等。ui
用法:url
from django.contrib.auth.models import User user = User.objects.create_user(username='用户名',password='密码',...)
create_superuser()
auth 提供的一个建立新的超级用户的方法,须要提供必要参数(username、password、email)等。
用法:
from django.contrib.auth.models import User user = User.objects.create_superuser(username='用户名',password='密码',email='邮箱',...)
示例:
from django.contrib import auth from django.contrib.auth.models import User def register(request): if request.method =='POST': username = request.POST.get('username') password = request.POST.get('password') # User.objects.create(username=username,password=password) # 这种方式不能使用,由于密码是明文的 # User.objects.create_user(username=username,password=password) #建立普通用户 User.objects.create_superuser(username=username,password=password,email='123@qq.com') #建立超级用户 return render(request,'register.html')
authenticate()
提供了用户认证功能,即验证用户名以及密码是否正确,通常须要username 、password两个关键字参数
登陆成功返回的是用户对象,错误返回None。
user = auth.authenticate(request,username=username,password=password)
login()
保存用户登陆状态,会自动在后端为该用户生成相关session数据
#若用户登陆成功,拿到user对象 if user: #保存用户登陆状态 auth.login(request,user) ''' 只要执行了这一句话,以后在任意能够获取到request对象的地方 均可以经过request.user获取到当前登陆的用户对象 '''
is_authenticated()
用来判断当前请求是否经过了认证,返回布尔值
request.user.is_authenticated()
校验用户是否登陆装饰器 @login_required
方式一:局部配置
@login_required(login_url='/login') #加参数 若未登陆就跳转到指定的登陆页面 def xxx(request): return HttpResponse('xxx页面')
方式二:全局配置
views.py
@login_required def xxx(request): return HttpResponse('xxx页面')
在settings.py中加入如下代码
LOGIN_URL = '/login/'
注意:若两种方法都有,则先执行方式一的
登陆综合示例:
def login(request): if request.method =='POST': username = request.POST.get('username') password = request.POST.get('password') user = auth.authenticate(request,username=username,password=password) #返回值user是一个对象 # print(user) # print(user.username) # print(user.password) ''' 用户名密码正确返回的是用户对象 错误返回None ''' if user: #保存用户登陆状态 auth.login(request,user) ''' 只要执行了这一句话,以后在任意能够获取到request对象的地方 均可以经过request.user获取到当前登陆的用户对象 ''' return HttpResponse('登陆成功') return render(request,'login.html') def get_user(request): print(request.user) ''' 用户登陆成功以后,request.user拿到的就是用户对象 user 没有登陆,获取到的是匿名用户 AnonymousUser ''' print(request.user.is_authenticated()) #返回的是布尔值,确认用户是否登陆 return HttpResponse('get_user') # 校验用户是否登陆装饰器 from django.contrib.auth.decorators import login_required @login_required(login_url='/login') #加参数 跳转到指定的登陆页面 # @login_required def xxx(request): return HttpResponse('xxx页面')
check_password(password)
校验密码是否正确,密码正确返回True,不然返回False
is_right = request.user.check_password(old_password)
set_password(new_password)
设置新密码,传新密码看成参数,设置完必定要调用用户对象的save方法。
request.user.set_password(new_password) request.user.save() #这步必定要作,保存到数据库
修改密码综合示例:
@login_required def set_password(request): if request.method =='POST': old_password = request.POST.get('old_password') new_password = request.POST.get('new_password') #1 先校验旧密码是否正确 is_right = request.user.check_password(old_password) print(is_right) #2 修改新密码 if is_right: request.user.set_password(new_password) request.user.save() #这步必定要作,保存到数据库 return render(request,'set_password.html')
logout()
注销登陆用户
auth.logout(request)