目录python
Auth模块是Django自带的用户认证模块,能够实现包括用户注册、用户登陆、用户认证、注销、修改密码等功能。默认使用 auth_user 表来存储用户数据。数据库
建立超级用户就是在auth_user表中插入数据,密码是加密的,所以不能手动在数据库中插入数据django
python3 manage.py createsuperuser
from django.contrib.auth.models import User user = User.objects.create_superuser(username='用户名',password='密码',email='邮箱',...)
验证用户名以及密码是否正确,通常须要username 、password两个关键字参数。若是认证成功(用户名和密码正确有效),便会返回一个 User 对象后端
from django.contrib import auth user = auth.authenticate(request, username=name, password=pwd)
至关因而在数据库中查询:session
user=models.User.objects.filter(name=name,pwd=pwd).first()
该函数接受一个HttpRequest对象,以及一个通过认证的User对象。app
该函数实现一个用户登陆的功能。它本质上会在后端为该用户生成相关session数据。函数
user = auth.authenticate(username=username, password=password) if user is not None: login(request, user) return HttpResponse('登陆成功')
一旦登陆成功,调了这个函数login(request,user),在之后的视图类(函数)中的request中就会有一个user对象,就是当前已登陆的用户对象。网站
该函数接受一个HttpRequest对象,无返回值。ui
当调用该函数时,当前请求的session信息会所有清除,即调用request.session.flush()。该用户即便没有登陆,使用该函数也不会报错。加密
auth.logout(request)
快捷的给某个视图添加登陆校验。
若用户没有登陆,则会跳转到django默认的 登陆URL '/accounts/login/ ' 并传递当前访问url的绝对路径 (登录成功后,会重定向到该路径)。
若是须要自定义登陆的URL,则须要在settings.py文件中经过LOGIN_URL进行修改。
from django.contrib.auth.decorators import login_required @login_required(redirect_field_name='eee',login_url='/login/') # redirect_field_name:修改?后面的key值,通常不回去修改 # login_url:若是没有登陆,跳转到的页面 # login_url局部配置 @login_required(login_url='/login/') # login_url全局配置 # 在setting文件中配置 LOGIN_URL='/login/' 直接使用 @login_required
from django.contrib.auth.models import User user = User.objects.create_user(username='用户名',password='密码',email='邮箱',...)
# 先拿到用户(能够是登陆用户,能够现查) user = request.user # 或者 user = authenticate(username=username, password=password) pwd = request.POST.get('pwd') ret = user.check_password(pwd)
修改密码时,能够先校验原密码输入是否正确,原密码正确再开始修改密码
user.set_password(pwd) user.save()
用来判断当前请求是否经过了认证。若是经过验证,是true,反之false
ret = request.user.is_authenticated()
删除用户和用orm在表中删除数据同样
# 在网站上线之前,将is_active和is_staff设置为False is_active # 禁止登陆网站(用户还存在,封号) is_staff # 是否对网站有管理权限(能不能登陆admin) request.user.is_active = False request.user.is_staff = False
from django.contrib.auth.models import User class UserDetail(models.Model): phone=models.CharField(max_length=32) # 一对一跟auth_user表作关联 # 若是是从外部引入的表模型,是不能加引号的 # 若是加引号,只是在当前model找 user=models.OneToOneField(to=User)
from django.contrib.auth.models import AbstractUser class UserInfo(AbstractUser): # username,password...都继承了 phone=models.CharField(max_length=32) sex=models.BooleanField()
一旦咱们经过继承来实现扩展auth_user表,那么作数据库迁移,之后就没有auth_user这个表了,之后认证组件用的表就是UserInfo。原来使用 auth_user 表模型的地方所有要用新的表模型——UserInfo
引用Django自带的User表,继承使用时须要设置,在setting中对新表进行配置:
AUTH_USER_MODEL ='app01.UserInfo'