国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

基于Django用戶認(rèn)證系統(tǒng)詳解

2020-02-22 23:16:20
字體:
供稿:網(wǎng)友

一. 認(rèn)證系統(tǒng)概要

create_user 創(chuàng)建用戶

authenticate 驗(yàn)證登錄

login 記住用戶的登錄狀態(tài)

logout 退出登錄

is_authenticated 判斷用戶是否登錄

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

二. 創(chuàng)建用戶和驗(yàn)證登錄

當(dāng)用戶注冊(cè)的時(shí)候用create_user(username,password,email)默認(rèn)情況下is_active=True,is_staff=False,is_superuser=False。

底層將password用hash算法加密之后存儲(chǔ)到數(shù)據(jù)庫中。

當(dāng)用戶登錄的時(shí)候用authenticate(username=username,password=password)驗(yàn)證登錄,判斷數(shù)據(jù)庫中是否存在用戶輸入的賬號(hào)和密碼,返回一個(gè)user對(duì)象。

底層將password用hash算法加密后和數(shù)據(jù)庫中password進(jìn)行對(duì)比。

三. 記住用戶的登錄狀態(tài)

當(dāng)用戶登錄的時(shí)候用login(request,user)來記住用戶的登錄狀態(tài),默認(rèn)將用戶的id存儲(chǔ)在session中。

login有兩個(gè)參數(shù)一個(gè)是request,一個(gè)是user,user的來源必須是authenticate返回的。也就是說用login之前必須先調(diào)用authenticate。

四. 退出登錄

當(dāng)用戶注銷的時(shí)候用logout(request),只需要一個(gè)參數(shù)request。

五. 判斷用戶是否登錄

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

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

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

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

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

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

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

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

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

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

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

以上這篇基于Django用戶認(rèn)證系統(tǒng)詳解就是小編分享給大家的全部內(nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持武林站長站。

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 长沙市| 越西县| 元谋县| 仁寿县| 石林| 宣恩县| 枣庄市| 宁陵县| 通海县| 安西县| 府谷县| 威远县| 渭南市| 和平县| 台州市| 石林| 喀喇沁旗| 桐梓县| 永康市| 阆中市| 临潭县| 额尔古纳市| 泰顺县| 屏山县| 衡阳县| 天峨县| 宣威市| 竹山县| 奉新县| 南平市| 阿荣旗| 长顺县| 兴安盟| 淮滨县| 和林格尔县| 铜陵市| 宜宾市| 莒南县| 安阳县| 涡阳县| 兴隆县|