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'
注:一旦指定了新的表模型,以前的表模型就不能用了。