django-auth組件

auth組件

1、auth模塊簡介

auth模塊是django自帶的用戶認證模塊,包含了身份驗證權限管理兩部分。python

身份驗證用於覈實某個用戶是否合法,權限管理用於決定一個合法用戶有哪些權限數據庫

默認狀況下,使用django-admin startproject命令後,認證模塊已經添加到settings文件中,若是沒有請手動添加django

INSTALLED_APPS中添加
`django.contrib.auth`  包含認證框架的核心以及默認模型
`django.contrib.contenttypes`  內容類型系統,用於給模型關聯許可
-------------------------------------------------------------------
MIDDLEWARE中添加
`SessionMiddleware`  經過請求管理會話
`AuthenticationMiddleware`  將會話和用戶關聯

2、用戶對象

在django中用戶對象是用戶認證系統的核心,只有一個用戶模型就是User模型,它位於django.contrib.auth.models,使用auth_user表來存儲用戶數據瀏覽器

1.建立用戶

create_user(username、password)-------普通用戶

from django.contrib.auth.models import User
user = User.objects.create_user(username='用戶名',password='密碼',email='郵箱',...)

user是一個User類的實例,已經保存在了數據庫內,你能夠隨時修改它的屬性,例如:
user.last_name='fj'
user.save()

create_superuser(username、password)-----------超級用戶

from django.contrib.auth.models import User
user = User.objects.create_superuser(username='用戶名',password='密碼',email='郵箱',...)

2.修改密碼

注:Django默認會對密碼進行加密,所以,不要對密碼進行直接操做session

set_password(password)------設置密碼

user.set_password(password='')
user.save()

check_password(password)-----檢查密碼是否正確

ok=user.check_password('密碼')

須要提供當前請求用戶的密碼,正確返回True,錯誤返回False

3.用戶驗證

authenticate()

驗證用戶名以及密碼是否正確,通常須要username 、password兩個關鍵字參數。app

若是認證成功(用戶名和密碼正確有效),便會返回一個 User 對象。框架

from django.contrib import auth
user = authenticate(username='usernamer',password='password')
if user:
    #認證成功
else:
    #認證失敗

is_authenticated()用來判斷是否經過了認證

def my_view(request):
  if not request.user.is_authenticated():
    return redirect('%s?next=%s' % (settings.LOGIN_URL, request.path))

4.User對象的屬性

  • is_staff:用戶是否擁有網站的管理權限
  • is_active:是否容許用戶登陸,設置爲False能夠在不刪除用戶的前提下禁止用戶登陸

3、在視圖中認證用戶

django使用session和中間件關聯請求對象中和認證系統,每一次請求都包含一個request.user屬性,表示當前用戶,若是用戶未登陸,該值爲AnonymousUser實例(匿名用戶),若是登陸它就是一個User模型的實例。網站

1.登陸用戶

login(HttpRequest,user)---會將用戶的ID保存在django的session中

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('用戶名或密碼錯誤')

2.註銷用戶

logout(request)----無返回值

from django.contrib.auth import logout
   
def logout_view(request):
  logout(request)
  • 當前請求的session信息會被所有刪除,若是用戶沒有登陸也不會報錯

3.登陸認證裝飾器

login_requierd(redirect_field_name='next',login_url='/login/')

用於給視圖添加登陸校驗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字符串的參數(全局設置)
  • 若是已經登陸,執行正常的視圖

4、擴展默認的auth_user表

默認的auth_user表字段是固定的幾個,須要擴展的話能夠經過下面的方法加密

1.定義一個表模型,和User一對一管理

class UserDetail(models.Model):
    phone=models.CharField(max_length=32)
    # 一對一跟auth_user表作關聯
    # 若是是從外部引入的表模型,是不能加引號的
    # 若是加引號,只是在當前model找
    user=models.OneToOneField(to=User)

2.定義一個表模型,繼承(AbstractUser類)

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'

注:一旦指定了新的表模型,以前的表模型就不能用了。

相關文章
相關標籤/搜索