2010-06-21 162 views
-1

我正在使用base.html模板頁面上的登錄框開發一個站點。對於需要用戶登錄的所有頁面,我使用login_required裝飾器。不過,我希望用戶能夠在其他頁面上登錄,如果他們想。Django的login_optional裝飾器?

其中的「login_required」裝飾做的事情是處理登錄,除了驗證你顯示你所期望的頁面之前登錄的螺母和螺栓。

我想什麼是這些可選頁面的「login_optional」裝飾(或login_required內可選參數)。我找不到這樣的事情。它是否存在,我只是想念它,或者我是否需要爲這些視圖推出我自己的登錄處理例程?

由於

麥克
EDIT(示例代碼)
模板

<form action="" method="post"> 
    <label for="username">Username:</label> 
    <input type="text" name="username" value="" id="username" size="10"/> 
    <label for="password">Password:</label> 
    <input type="password" name="password" value="" id="password" size="10"/> 
    <input type="submit" value="Login"/> 
    <input type="hidden" name="next" value="{{ next|escape }}"/> 
</form 

>

需要登錄碼

@login_required 
def chooseDistributor(request): 
    user = request.user 
    # blah stuff deleted 
    # NOTHING TO HANDLE request.POST! 
    return render_to_response('choose_distributor.html',locals()) 

登錄可選代碼

def showWelcome(request): 
    user = request.user 
    return render_to_response('welcome/home.html',locals()) 

回答

2

你是什麼意思? login_optional只是一個沒有login_required裝飾器的視圖...:p。

注意,login_required裝飾不處理任何登錄功能,如果用戶通過控制請求上下文的用戶對象記錄在它只是檢查。如果他/她未登錄,則此裝飾器將重定向到保存真實登錄功能的頁面。

所以裝飾只是一個檢查+重定向,使得登錄可選的頁面,因此只是去掉裝飾。

+0

參見上面的編輯。總之,我假設login_required裝飾器處理來自登錄表單的POST響應。當然,沒有裝飾器和沒有任何其他POST處理代碼的頁面將無法處理登錄操作。 雖然我可以簡單地將適當的代碼從login_required裝飾複製,這違反了DRY原則,所以我問我的問題。 – jamida 2010-06-22 20:28:43

+0

不,登錄裝飾器不包含該登錄POST處理代碼,只有登錄頁面會執行該操作。但是,任何寫得很好的登錄頁面都會將您重定向回使用登錄裝飾器的視圖。真的,login_required裝飾器不包含任何登錄處理代碼:p。 – KillianDS 2010-06-22 21:17:13

+0

是的,我現在看了,明白了...... >>臉紅「謝謝。 – jamida 2010-06-22 21:39:00