2011-05-09 4 views
4

私はdjango 1.1を使用しています。 is_activeフラグのドキュメント
http://docs.djangoproject.com/en/1.1/topics/auth/#topics-auth
は、これは、ユーザーがログインすることができます かどうかを制御しませんdjango-registration、django.contrib.authログインとユーザー "アクティブ"フラグ

を言います。あなたがしたいので、もし 認証パスで何が、 is_activeフラグをチェックしません is_activeに基づくログインを拒否する がFalseである場合は、自分のログインビューで をチェックする必要があります。ただし、 のhas_perm()のような許可チェックでは、 というこのフラグがチェックされ、 の非アクティブユーザーの場合は常にFalseが返されます。

私はdjango-registration(最新の0.8 alpha)を使用しており、すべてのデフォルトバックエンドを使用しています。 django登録の前提はis_activeフラグに基づいています。すなわち、ユーザが起動した後にのみ設定される。しかし、ユーザーがログインすると、django.contrib.auth.views.loginを使用していることがわかります。私はauth_urls.pyのコードからこれを見ることができます。

すると、ユーザ登録がまだ起動していない、私はの線に沿って何か「あなたはあなたのアカウントを有効化していない」と言う表示するメッセージをしたい

現在デフォルトの動作は、フォームのエラーですメッセージは

@login_required 

私の質問があり、私はまた私の見解でログインデコレータを使用してい

を「ユーザ名とパスワードが一致しない」、言う:

EDIT:ありがとうございましたJamesとHenry。私は自分の質問をよく説明しているとは思わない。私はこれをやり直しました。

  1. Djangoのドキュメントは、ユーザーのログイン時に決定因子としてis_active使用されていないことを述べている。これは非常に明確にませケースです。自分で試してみてください。私はコード内でこれがどこで起こるかわかりません。誰か知っていますか?限り、私は見ることができますそれはジャンゴ登録やdjango.contrib.authで発生しません。
  2. 私が上記で説明したエラーメッセージを表示するには、これについてどうすればよいでしょうか?私がdjango登録を使用しているので、配管の多くが既に行われていることに注意してください。私はむしろこれを変更したり、すべてを書き換えたりしません。可能であれば、私は.... "エレガントな"ソリューションを探しています。 Q1に関して事前

おかげで、

答えて

0

私は問題はジャンゴ登録してあると思います。

は、それが非アクティブなユーザーがログインを許可しないことを言ってhttps://bitbucket.org/ubernostrum/django-registration/src/tip/docs/quickstart.rst

のライン132上の情報を参照してください。

UPDATE

独自のバックエンドを書いたり、簡単なバックエンドを使用してactivatedと呼ばれる自分のプロファイルモデルに新しいプロパティを追加することができます。これは相当量の作業になります。

どこにあるのかは、django.contrib.auth.views.loginだと思います。それを見ているうちにあなたはかなり簡単にそれをコピーして自分自身を作ることができると思う。 (本当に問題がある場合)

これで、ログインURLのauth_urls.pyファイルに置き換える必要があります。

EDIT

私はちょうどあなたが、それはフォームがそれをテストしないと言うことがわかりますの違い

http://docs.djangoproject.com/en/1.2/topics/auth/#django.contrib.auth.models.User.is_active をチェックするために1.2をドキュメントに行きました。だからそれはいつもしましたが、それは適切に解読されなかったか、1.2に更新され、忘れられた/知られていませんでした。

+0

@James_Khouryおかげさまで、コードで時間を費やした後、私はこれをdjango.contrib.auth(django-registrationではなく)でチェックする必要があります。あなたが私に指摘しているコード行は、私がすでに観察していることを説明するコメントに過ぎません。また、どのようにその特殊なエラーメッセージを達成するための任意のアイデアですか?ありがとう。 –

+0

@ w--私の謝罪。私の答えを更新しました。 –

+0

@ w--ちょうど助けてくれるドキュメントの情報を見つけました。 –

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.1)はひどいです。 なぜこれは公式のdjangoドキュメントで明示的ではないのですか?人がやりたいと思うかなり基本的なもののように思える。

関連する問題