首先我們要知道繼承自loginrequiredmixin的檢視類會怎樣走,未登入,會執行 handle_no_permission函式,登陸了,就直接繼續執行函式下邊的**,如:
class
usercenterinfoview
(loginrequiredmixin, view)
:def
get(self,request)
:return render(request,
"user_center_info.html"
)
未登入,執行handle_no_permission函式,重定向到login_url寫的路由那裡,如果登入了,就什麼也不用管,繼續執行return就行。
再然後,我們要知道為什麼要對loginrequiredmixin進行重寫,我們先看**,下方是原始碼
class
accessmixin
: 略~
~def
handle_no_permission
(self)
:if self.raise_exception or self.request.user.is_authenticated:
raise permissiondenied(self.get_permission_denied_message())
return redirect_to_login(self.request.get_full_path(
), self.get_login_url(
), self.get_redirect_field_name())
class
loginrequiredmixin
(accessmixin)
:"""verify that the current user is authenticated."""
defdispatch
(self, request,
*args,
**kwargs):if
not request.user.is_authenticated:
return self.handle_no_permission(
)return
super()
.dispatch(request,
*args,
**kwargs)
我們發現,在loginrequiredmixin中判斷後,如果未登入,他會呼叫handle_no_permission方法,這個方法在最後會有乙個重定向的操作,加入說,我們在未登入後想要的,是返回乙個json資料的話,這個就很明顯不適合了,這時候就要對他進行重寫。
那麼,問題來了,怎麼重寫呢,在 loginrequiredmixin中,我們能看出來,他進行了判斷,判斷是否登入,這一點我們是需要的,保留下來,判斷裡面就是handle_no_permission函式了,所以我們很容易就能理解,這個dispatch是不用被重寫的,說白了,他就是個判斷的作用,我們的目的肯定不是對判斷進行重寫吧,我們的目的是對返回值進行重寫,所以,我們是需要對handle_no_permission函式進行重寫的,我們再分析下這個函式,看**:
def
handle_no_permission
(self)
:if self.raise_exception or self.request.user.is_authenticated:
raise permissiondenied(self.get_permission_denied_message())
return redirect_to_login(self.request.get_full_path(
), self.get_login_url(
), self.get_redirect_field_name(
))
那個if應該是判斷是否出錯的東西,第二個是判斷是否登入。我們在dispatch中已經判斷過了,所以這個裡面寫不寫if其實沒有多大必要,所以我們只管對return的東西進行重寫就行,我們可以把函式重寫為:
class
loginrequiredjsonmixin
(loginrequiredmixin)
:def
handle_no_permission
(self)
:return jsonresponse(
)
class
loginrequiredjsonmixin
(loginrequiredmixin)
:def
handle_no_permission
(self)
:return jsonresponse(
)def
dispatch
(self, request,
*args,
**kwargs):if
not request.user.is_authenticated:
return self.handle_no_permission(
)return
super()
.dispatch(request,
*args,
**kwargs)
當我們的乙個檢視類繼承自我們重寫的這個loginrequiredmixin後,當檢視類執行時,會先進行判斷是否登入,即,執行dispatch函式,然後就會執行到我們寫的handle_no_permission函式,再然後就會返回出json資料了。
完結撒花,起飛。
只是一點自己的理解,望斧正。
對建立游標對理解
步驟 1 首先經過底層的 編寫已經建立起了了python和資料庫之間的溝通橋梁並封裝成了模組,通過pymysql下的conntent 方法與之建立起了連線,例項物件。pymysql.connect 方法返回的是connections模組下的connection 例項,connect 方法傳參就是在給...
對勾函式 對勾函式
對勾函式是一種類似於反比例函式的一般函式。所謂的對勾函式,是形如 f x ax b x 的函式,是 一種教材上沒有但考試老喜歡考的函式,所以更加要注意和學習。一般的函式影象形似兩個中心對稱的 對勾,故名。當x 0 時,f x ax b x 有最小值 這裡為了研究方便,規定a 0 b 0 也就是當 x...
一對多 多對一
pip install djangorestframework 3.9.2 pip install markdown 3.0.1 markdown support for the browsable api.pip install django filter 2.1.0 filtering supp...