欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Django Auth應用實現(xiàn)用戶身份認證

 更新時間:2021年12月03日 10:52:23   投稿:newname  
Django Auth 應用一般用在用戶的登錄注冊上,用于判斷當前的用戶是否合法。本文將介紹Auth的另一個功能,即認證用戶身份,感興趣的同學可以關(guān)注一下

我們知道 Django Auth 應用一般用在用戶的登錄注冊上,用于判斷當前的用戶是否合法,從而可以幫助開發(fā)者快速的構(gòu)建用戶系統(tǒng),那么 Auth 應用又是如何是實現(xiàn)用戶的認證的呢?當給定相關(guān)的條件或?qū)傩詴r候,我們可以去獲取用戶對象這個過程就被稱為用戶認證,Django Auth 應用提供了一個用來認證的方法即 authenticate 方法用來實現(xiàn)用戶的認證行為。下面就讓我們一起來認識一下吧!

1. 實現(xiàn)用戶的認證

authenticate 方法一般接受 username 與 password 作為參數(shù),如果通過了認證,就返回認證的實例對象,否則就會返回 None,下面我們進行一下相關(guān)的實例演示:

In [1]: from django.contrib.auth import authenticate

In [2]: user=authenticate(username="bookstore",password="python_django")

In [3]: user

Out[3]: <User: bookstore>

In [4]: user=authenticate(username="bookstore",password="python")

In [5]: user is None

Out[5]: True

用戶認證過程解析

上述代碼中,我們首先引入 authenticate ,可知該方法定義在 django/contrib/auth/__init__.py 文件中,然后我們對上一節(jié)中創(chuàng)建的 user 用戶進行可認證,輸入它的兩個參數(shù)值,最后驗證通過返回了 user 的實例對象,最后我們更改了密碼的參數(shù)值將其設置為不正確,并使用 user is None 的方法查看其返回結(jié)果是否為 None,得到的布爾值為 Ture,所以用戶認證失敗。這就是用戶認證的的過程。

那么 authenticate 方法是如何實現(xiàn)的呢?我們分析一下它的源碼:

def authenticate(request=None, **credentials):
    #__get_backends獲取當前系統(tǒng)中定義的認證后端,并依次迭代
    for backend, backend_path in _get_backends(return_tuples=True):
        try:
            inspect.getcallargs(backend.authenticate, request, **credentials)
        except TypeError:
            #此后端不接受這些憑據(jù)作為參數(shù)。返回繼續(xù)執(zhí)行循環(huán)
            continue
        try:
             #通過當前的認證后端嘗試獲取 User,若獲取不到就會拋出異常!
            user = backend.authenticate(request, **credentials)
        except PermissionDenied:
            #拋出異常Permission
            break
         #如果沒有返回,繼續(xù)執(zhí)行下一個認證
        if user is None:
            continue
        #添加一個屬性標志,代表后端認證成功
        user.backend = backend_path
        return user
    # 所提供的憑據(jù)對所有后端、觸發(fā)信號無效
    user_login_failed.send(sender=__name__, credentials=_clean_credentials(credentials), request=request)

Django獲取后端認證

上述代碼中,我們可以看出,authenticate 方法使用了當前系統(tǒng)中定義的認證后端來獲取用戶對象,當前系統(tǒng)的默認認證后端是 ModelBackend。那么 Django 是如何獲取認證后端的呢?如下所示:

def _get_backends(return_tuples=False):
    backends = []
    #AUTHENTICATION_BACKENDS 定義了當前系統(tǒng)可以用的身份認證列表
    for backend_path in settings.AUTHENTICATION_BACKENDS:
        #加載后端
        backend = load_backend(backend_path)
        backends.append((backend, backend_path) if return_tuples else backend)
    #如果未定義后端列表拋出異常
    if not backends:
        raise ImproperlyConfigured(
            'No authentication backends have been defined. Does '
            'AUTHENTICATION_BACKENDS contain anything?'
        )
    return backends

但是我們并沒有對 AUTHENTICATION_BACKENDS 進行定義,所以這里會使用戶 Django 框架默認的后端認認證,它位于 django/conf/global_settings.py 文件中,如下所示:

AUTHENTICATION_BACKENDS=['django.contib.auth.backends.ModelBackend']  #當前系統(tǒng)默認認證后端ModelBackend

AUTHENTICATION_BACKENDS=['django.contib.auth.backends.ModelBackend']? #當前系統(tǒng)默認認證后端ModelBackend

2. Auth應用獲取用戶模型

get_user_model 用于獲取當前系統(tǒng)定義的“用戶模型”。其源代碼如下所示:

def get_user_model():
    """
    返回一個處于激活狀態(tài)的 User
    """
    try:
        return django_apps.get_model(settings.AUTH_USER_MODEL, require_ready=False)
    except ValueError:
        raise ImproperlyConfigured("AUTH_USER_MODEL must be of the form 'app_label.model_name'")
    except LookupError:
        raise ImproperlyConfigured(
            "AUTH_USER_MODEL refers to model '%s' that has not been installed" % settings.AUTH_USER_MODEL
        )

get_user_model 使用實例如下所示:

# 使用默認User model時
>>> from django.contrib.auth import get_user_model
>>> get_user_model()
<class 'django.contrib.auth.models.User'>
# 使用自定義User model時
>>> from django.contrib.auth import get_user_model
>>> get_user_model()
<class 'xxx.models.NewUser'>
# get_user_model()實際獲取的是settings.AUTH_USER_MODEL指定的User model

Django 允許在 settings.py 文件中定義 AUTH_USER_MODEL 覆蓋默認的 auth.User,以滿足特定項目的需求。所以,ModelBacakend 的 authenticate 方法首先會通過 username 嘗試獲取 User 對象,再去校驗密碼是否正確以及 is_active 的狀態(tài),最后返回 User 對象或是返回 None。在? settings.py 配置 AUTH_USER_MODEL 格式如下所示:

#格式: "<django_app名>.<model名>"
AUTH_USER_MODEL = "appname.NewUser" 
#在models.py編寫示例
from django.conf import settings
from django.db import models
class Article(models.Model):
    author = models.ForeignKey(settings.AUTH_USER_MODEL)
    title = models.CharField(max_length=100)

在 django/contrib/auth/__init__.py 文件中定義了用戶的各種行為,例如,登錄、退出、用戶的認證等等,通過這些可見 Django 的強大所在,Auth 應用模塊可以幫助開發(fā)者減少很多的工作量,而且 Auth 應用的源碼可以給開發(fā)者提供諸多的用戶系統(tǒng)重寫思路。?

到此這篇關(guān)于Django Auth應用實現(xiàn)用戶身份認證的文章就介紹到這了,更多相關(guān)Django Auth應用內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Linux中安裝Python的交互式解釋器IPython的教程

    Linux中安裝Python的交互式解釋器IPython的教程

    IPython是一種基于Python的Shell,由于有了Python編程語言的支撐,而比一般的Shell更加強大.下面就來看一下Linux中安裝Python的交互式解釋器IPython的教程
    2016-06-06
  • python單鏈路性能測試實踐

    python單鏈路性能測試實踐

    這篇文章主要為大家介紹了python單鏈路性能測試實踐示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-07-07
  • Python中匹配模糊的字符串問題分析

    Python中匹配模糊的字符串問題分析

    這篇文章主要介紹了Python中匹配模糊的字符串的過程,我們將學習如何使用process 模塊,該模塊允許我們在模糊字符串邏輯的幫助下有效地匹配或提取字符串,需要的朋友可以參考下
    2023-09-09
  • python進行二次方程式計算的實例講解

    python進行二次方程式計算的實例講解

    在本篇內(nèi)容里小編給大家整理了一篇關(guān)于python進行二次方程式計算的實例講解內(nèi)容,有興趣的朋友們可以學習下。
    2020-12-12
  • 關(guān)于pandas.date_range()的用法及說明

    關(guān)于pandas.date_range()的用法及說明

    這篇文章主要介紹了關(guān)于pandas.date_range()的用法及說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-07-07
  • pandas中的數(shù)據(jù)去重處理的實現(xiàn)方法

    pandas中的數(shù)據(jù)去重處理的實現(xiàn)方法

    這篇文章主要介紹了pandas中的數(shù)據(jù)去重處理的實現(xiàn)方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-02-02
  • Python利用matplotlib繪制折線圖的新手教程

    Python利用matplotlib繪制折線圖的新手教程

    這篇文章主要給大家介紹了關(guān)于Python利用matplotlib繪制折線圖的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-11-11
  • 關(guān)于Python中Flask全局異常處理流程詳解

    關(guān)于Python中Flask全局異常處理流程詳解

    Flask是一個基于Python的Web框架,它提供了全局異常處理的機制來捕獲和處理應用程序中的異常,本文將詳細介紹Flask的全局異常處理,并提供相應的代碼示例,需要的朋友可以參考下
    2023-06-06
  • python字典get()方法用法分析

    python字典get()方法用法分析

    這篇文章主要介紹了python字典get()方法用法,實例分析了使用get方法獲取字典值的技巧,非常具有實用價值,需要的朋友可以參考下
    2015-04-04
  • 基于Python_腳本CGI、特點、應用、開發(fā)環(huán)境(詳解)

    基于Python_腳本CGI、特點、應用、開發(fā)環(huán)境(詳解)

    下面小編就為大家?guī)硪黄赑ython_腳本CGI、特點、應用、開發(fā)環(huán)境(詳解)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-05-05

最新評論