auth模块是django自带的用户认证模块,包含了身份验证和权限管理两部分。python
身份验证用于核实某个用户是否合法,权限管理用于决定一个合法用户有哪些权限数据库
默认状况下,使用django-admin startproject
命令后,认证模块已经添加到settings文件中,若是没有请手动添加django
INSTALLED_APPS中添加 `django.contrib.auth` 包含认证框架的核心以及默认模型 `django.contrib.contenttypes` 内容类型系统,用于给模型关联许可 ------------------------------------------------------------------- MIDDLEWARE中添加 `SessionMiddleware` 经过请求管理会话 `AuthenticationMiddleware` 将会话和用户关联
在django中用户对象是用户认证系统的核心,只有一个用户模型就是User模型,它位于django.contrib.auth.models
,使用auth_user表来存储用户数据浏览器
from django.contrib.auth.models import User user = User.objects.create_user(username='用户名',password='密码',email='邮箱',...) user是一个User类的实例,已经保存在了数据库内,你能够随时修改它的属性,例如: user.last_name='fj' user.save()
from django.contrib.auth.models import User user = User.objects.create_superuser(username='用户名',password='密码',email='邮箱',...)
注:Django默认会对密码进行加密,所以,不要对密码进行直接操做session
user.set_password(password='') user.save()
ok=user.check_password('密码') 须要提供当前请求用户的密码,正确返回True,错误返回False
验证用户名以及密码是否正确,通常须要username 、password两个关键字参数。app
若是认证成功(用户名和密码正确有效),便会返回一个 User 对象。框架
from django.contrib import auth user = authenticate(username='usernamer',password='password') if user: #认证成功 else: #认证失败
def my_view(request): if not request.user.is_authenticated(): return redirect('%s?next=%s' % (settings.LOGIN_URL, request.path))
django使用session和中间件关联请求对象中和认证系统,每一次请求都包含一个request.user
属性,表示当前用户,若是用户未登陆,该值为AnonymousUser
实例(匿名用户),若是登陆它就是一个User模型的实例。网站
from django.contrib.auth import authenticate,login def my_view(request): username = request.POST['username'] password = request.POST['password'] user = authenticate(username=username, password=password) if user: login(request,user) return HttpResponse('登陆成功') else: return HttpResponse('用户名或密码错误')
from django.contrib.auth import logout def logout_view(request): logout(request)
用于给视图添加登陆校验ui
from django.contrib.auth.decorators import login_required @login_required def other_view(request): ...
redirect_field_name
:修改的是浏览器 ? 后面的key值login_url='/login/'
若是没有登陆跳转到的页面 (局部设置)settings.LOGIN_URL
设置没有登陆跳转的页面,传递当前路径为url字符串的参数(全局设置)默认的auth_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): """ 用户信息表 """ nid = models.AutoField(primary_key=True) phone = models.CharField(max_length=11, null=True, unique=True) def __str__(self): return self.username
建好模型后须要在settings中配置,
AUTH_USER_MODEL='app名.UserInfo'
注:一旦指定了新的表模型,以前的表模型就不能用了。