91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

基于Django用戶認證系統詳解

發布時間:2020-09-20 17:32:23 來源:腳本之家 閱讀:149 作者:Blog的猿序程個一 欄目:開發技術

一. 認證系統概要

create_user 創建用戶

authenticate 驗證登錄

login 記住用戶的登錄狀態

logout 退出登錄

is_authenticated 判斷用戶是否登錄

login_required 判斷用戶是否登錄的裝飾器

二. 創建用戶和驗證登錄

當用戶注冊的時候用create_user(username,password,email)默認情況下is_active=True,is_staff=False,is_superuser=False。

底層將password用hash算法加密之后存儲到數據庫中。

當用戶登錄的時候用authenticate(username=username,password=password)驗證登錄,判斷數據庫中是否存在用戶輸入的賬號和密碼,返回一個user對象。

底層將password用hash算法加密后和數據庫中password進行對比。

三. 記住用戶的登錄狀態

當用戶登錄的時候用login(request,user)來記住用戶的登錄狀態,默認將用戶的id存儲在session中。

login有兩個參數一個是request,一個是user,user的來源必須是authenticate返回的。也就是說用login之前必須先調用authenticate。

四. 退出登錄

當用戶注銷的時候用logout(request),只需要一個參數request。

五. 判斷用戶是否登錄

在后臺的視圖函數里可以用request.user.is_authenticated()判斷用戶是否登錄

在前端頁面中可以用{% if user.is_authenticated %}{% endif %}判斷用戶是否登錄

六. 裝飾器判斷用戶是否登錄

基于普通的視圖函數可以使用@login_required來裝飾,但是基于類視圖的get和post方法不能直接使用@login_required來裝飾。

基于類視圖的裝飾有以下三種:

第一種:在urls文件中導入login_requtred,直接裝飾as_view()函數

url(r'^$', login_required(UserInfoView.as_view()), name='user') 

第二種:自定義一個LoginRequiredView類繼承View類,重寫as_view()函數,并裝飾as_view()函數的返回值。 我們自定義的視圖類就不需要再繼承View類,直接繼承LoginRequiredView類就好了。

class LoginRequiredView(View):
  @classmethod
  def as_view(cls, **initkwargs):
    # 調用View類中as_view方法
    view = super(LoginRequiredView, cls).as_view(**initkwargs)
    # 調用login_required裝飾器
    return login_required(view)

第三種:自定義一個LoginRequiredMixin類,重寫as_view()函數,調用View中的as_view()函數,并裝飾as_view()函數的返回值。 我們自定義的視圖類需要先繼承LoginRequiredMixin類再繼承View類。這種方式的關鍵點在于:多繼承中super()的調用順序和__mro__的順序是一樣的。

class LoginRequiredMixin(object):
  @classmethod
  def as_view(cls, **initkwargs):
    # 調用View類中as_view方法
    view = super(LoginRequiredMixin, cls).as_view(**initkwargs)
    # 調用login_required裝飾器
    return login_required(view)

以上這篇基于Django用戶認證系統詳解就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持億速云。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

通渭县| 托克逊县| 澄城县| 即墨市| 宜春市| 乌拉特前旗| 绿春县| 江门市| 忻州市| 福泉市| 大冶市| 斗六市| 绥宁县| 涞水县| 张家港市| 康保县| 蓬安县| 岢岚县| 乌恰县| 忻城县| 大洼县| 上高县| 九寨沟县| 巍山| 临洮县| 河曲县| 张掖市| 唐山市| 康乐县| 英山县| 新泰市| 广德县| 穆棱市| 泾阳县| 会昌县| 灯塔市| 恭城| 无棣县| 教育| 双牌县| 黄大仙区|