2011-05-09 28 views
4

我正在使用django 1.1。該文檔
http://docs.djangoproject.com/en/1.1/topics/auth/#topics-auth
在IS_ACTIVE標誌 它說django註冊,django.contrib.auth登錄和用戶「活動」標誌

這並不控制用戶是否 可以登錄。在 認證路徑沒有檢查 IS_ACTIVE標誌,所以如果你想以 拒絕基於is_active 的登錄爲False,則由您在自己的登錄視圖中檢查 。但是,使用方法 (如has_perm())的 權限檢查會檢查此標誌 ,並且對於 非活動用戶將始終返回False。

我使用django註冊(最新0.8 alpha)和使用所有默認後端。 django註冊的整個前提是基於is_active標誌。即它只在用戶激活後才被設置。但是,我可以看到,當用戶登錄時,它使用django.contrib.auth.views.login。我可以從auth_urls.py中的代碼中看到這一點。

當用戶註冊,但尚未啓動,我要顯示一個消息,說大致爲「您尚未激活您的帳戶」

東西線目前的默認行爲是形式的錯誤消息稱,我還使用登錄裝飾我的意見「的用戶名和密碼不匹配」

@login_required 

我的問題是:

編輯:感謝詹姆斯和亨利。我認爲我不擅長描述我的問題。我重做了這個。

  1. Django的文件說,在登錄用戶時IS_ACTIVE不作爲決定因素。這是很清楚的的情況。親自嘗試一下。我無法弄清楚代碼中發生了什麼。有人知道嗎?據我所知,它不會發生在django註冊或django.contrib.auth中。
  2. 爲了顯示我上面描述的錯誤信息,我最好的辦法是什麼?請記住我正在使用django註冊,因此很多配管工作已經完成。我寧願不修改或重寫所有內容。如果可能的話,我正在尋找....「優雅」的解決方案。

在此先感謝

相對於Q1,

回答

0

我認爲這個問題是在Django的註冊。

查看的https://bitbucket.org/ubernostrum/django-registration/src/tip/docs/quickstart.rst

線132的信息它說,它不會允許非活躍用戶登錄。

UPDATE

你可以寫自己的後端或使用簡單的後端和你的所謂activated輪廓模型添加新的屬性。這將是相當數量的工作。

至於它在哪裏,我認爲它在django.contrib.auth.views.login。沒有花太多時間翻閱它,我認爲你可以很容易地複製它,並製作你自己的。 (如果確實是問題)

然後,您需要在auth_urls.py文件中將其替換爲登錄網址。

編輯

我剛去DOCS 1.2檢查差異

http://docs.djangoproject.com/en/1.2/topics/auth/#django.contrib.auth.models.User.is_active 你會看到,它說的形式做測試。所以它總是這樣做,但它沒有被正確地分解,或者你已經更新到1.2並且被遺忘/未知。

+0

@James_Khoury感謝詹姆斯,花了更多時間與代碼後,我敢肯定這必須在django.contrib.auth(而不是在django註冊)檢查任何想法在哪裏?你指向我的代碼行只是一個描述我已經觀察到的內容的評論。此外,有關如何完成該特定錯誤消息的任何想法?謝謝。 – 2011-05-09 05:29:37

+0

@ w--我的道歉。更新了我的答案。 – 2011-05-09 05:56:34

+0

@ w--剛剛在應該幫助的文檔中發現了一些信息。 – 2011-05-09 06:09:06

5

感謝大家思考這個問題。 最後,我注意到我之前沒有注意到的默認模板中的一些html代碼。

{% if form.errors %} 
<div class="error"> 
<p>Your username and password didn't match. Please try again.</p> 
</div> 
{% endif %} 

看到這個後覺得很愚蠢。我從另一個項目複製了代碼,並假定錯誤是動態生成的,而不是硬編碼。

於是我開始調查

forms.errors 

,發現

forms.non_field_errors 

,並試圖找出如何風格輸出發現(因爲默認情況下的蠢事輸出HTML UL標籤內)這個:

Django output form errors as table rows in {{ form.as_table }}

謝謝(因爲他的問題變得明顯)

一個評論。這個文檔(至少1.1)是可怕的。 爲什麼在官方Django文檔中沒有更明確的是超出了我的意思。看起來像是人們想要做的一件非常基本的事情。