天天看點

django架構中的auth、permissions的功能、作用

作者:不易9093

Django 是一個功能強大的 Web 架構,它提供了許多内置的功能來幫助我們建構 Web 應用程式。其中,auth 和 permissions 是 Django 架構中非常重要的兩個功能之一,它們可以幫助我們更好地控制使用者的通路權限,進而保護我們的應用程式。

auth

auth 是 Django 架構中處理使用者認證的子產品。它提供了一些類和方法,用于實作使用者的注冊、登入、登出等功能。通過 auth 子產品,我們可以輕松地實作使用者身份驗證,進而保護我們的應用程式不被未經授權的使用者通路。

使用者認證的流程

Django 中的使用者認證流程分為以下幾個步驟:

使用者填寫登入表單并送出表單資料。

Django 在資料庫中查找與送出的使用者名和密碼比對的使用者。

如果找到了比對的使用者,則 Django 會建立一個新的會話,并在該會話中存儲使用者的 ID。

Django 将會話 ID 存儲在使用者的浏覽器 cookie 中,并将 cookie 發送回用戶端。

用戶端(即使用者的浏覽器)将 cookie 存儲在本地,并在下一次請求中将其發送回伺服器。

Django 識别 cookie 中的會話 ID,并使用該 ID 查找相應的使用者。

如果會話仍然有效,則使用者被視為已登入。否則,使用者将被要求重新登入。

auth 子產品的主要類和方法

Django 中的 auth 子產品提供了許多類和方法,用于實作使用者認證。下面是一些常用的類和方法:

User 類:用于表示使用者對象。該類包含使用者名、密碼、電子郵件位址等屬性。

authenticate() 函數:用于驗證使用者的使用者名和密碼是否正确。如果驗證成功,則傳回一個表示使用者的 User 對象;否則傳回 None。

login() 函數:用于将使用者登入到系統中。該函數接受一個 HttpRequest 對象和一個 User 對象作為參數,并将使用者的 ID 存儲在會話中。

logout() 函數:用于将使用者從系統中登出。該函數接受一個 HttpRequest 對象作為參數,并将會話中存儲的使用者 ID 删除。

auth 子產品的使用示例

下面是一個使用 auth 子產品實作使用者認證的示例代碼:

from django.contrib.auth import authenticate, login, logout
from django.contrib.auth.models import User
from django.shortcuts import render, redirect
def login_view(request):
if request.method == 'POST':
username = request.POST.get('username')
password = request.POST.get('password')
user = authenticate(request, username=username, password=password)
if user is not None:
login(request, user)
return redirect('home')
else:
error_message = 'Invalid username or password.'
return render(request, 'login.html', {'error_message': error_message})
else:
return render(request, 'login.html')
def logout_view(request):
logout(request)
return redirect('login')           

在上面的代碼中,login_view() 函數處理使用者的登入請求。如果使用者送出的使用者名和密碼正确,則調用 login() 函數将使用者登入到系統中。如果使用者名或密碼不正确,則向使用者顯示錯誤消息。logout_view() 函數處理使用者的登出請求。它調用 logout() 函數将使用者從系統中登出,并将使用者重定向到登入頁面。

permissions

permissions 是 Django 架構中處理使用者權限的子產品。它提供了一些類和方法,用于實作使用者的授權管理。通過 permissions 子產品,我們可以輕松地控制使用者對于某些資源的通路權限,進而保護我們的應用程式不被未經授權的使用者通路。

權限控制的流程

Django 中的權限控制流程分為以下幾個步驟:

Django 在每個請求中檢查使用者是否已登入。如果使用者已登入,則 Django 會擷取使用者的權限清單。

Django 在每個請求中檢查該使用者是否有通路請求的資源的權限。如果使用者有通路權限,則 Django 允許使用者通路該資源;否則,Django 将傳回一個 “403 Forbidden” 響應。

permissions 子產品的主要類和方法

Django 中的 permissions 子產品提供了許多類和方法,用于實作權限控制。下面是一些常用的類和方法:

PermissionRequiredMixin 類:用于在視圖函數中檢查使用者是否具有指定的權限。該類包含一個 permission_required 屬性,用于指定需要的權限。

User 類的 groups 屬性:用于擷取使用者所屬的組。一個組是一組使用者,它們共享相同的權限。

Group 類:用于表示組對象。該類包含組名、權限清單等屬性。

Permission 類:用于表示權限對象。該類包含權限名稱、權限描述等屬性。

permissions 子產品的使用示例

下面是一個使用 permissions 子產品實作權限控制的示例代碼:

from django.contrib.auth.mixins import PermissionRequiredMixin
from django.views.generic import TemplateView
class AdminView(PermissionRequiredMixin, TemplateView):
template_name = 'admin.html'
permission_required = 'auth.change_user'
class UserView(PermissionRequiredMixin, TemplateView):
template_name = 'user.html'
permission_required = 'auth.view_user'           

在上面的代碼中,AdminView 和 UserView 類都繼承自 PermissionRequiredMixin 類。AdminView 類的 permission_required 屬性被設定為 'auth.change_user',表示該視圖需要使用者具有更改使用者權限的權限才能通路。UserView 類的 permission_required 屬性被設定為 'auth.view_user',表示該視圖需要使用者具有檢視使用者權限的權限才能通路。如果使用者沒有這些權限,則 Django 将傳回一個 “403 Forbidden” 響應。

django架構中的auth、permissions的功能、作用

努力拼搏,刻苦學習

  1. auth_group表:

在這個表中存儲使用者組資訊,包括使用者組的名稱和描述資訊。用于對使用者進行分類、權限配置設定以及權限控制等操作。例如在系統中需要給不同的使用者配置設定不同的權限,可以把他們歸組到一個使用者組中,然後給這個使用者組配置設定相應的權限。

  1. auth_permission表:

存儲應用程式中定義的所有權限,包括權限的名稱、編碼等資訊。用于對應用程式中的某些操作進行權限控制。例如在系統中需要對一些敏感操作進行權限控制,隻有擁有相應權限的使用者才能進行操作。

  1. auth_group_permissions表:

記錄使用者組和權限的關系,即使用者組對某個權限是否具有通路權限。用于控制使用者組的權限。