4

私はジャンゴ1.1を使用しています。 is_active フラグに関するドキュメント
http://docs.djangoproject.com/en/1.1/topics/auth/#topics-auth

これは、ユーザーがログインできるかどうかを制御しません。認証パスでは is_active フラグをチェックするものは何もないため、is_active が False であることに基づいてログインを拒否する場合は、自分のログインでそれを確認する必要があります。見る。ただし、has_perm() などのメソッドを使用したパーミッション チェックはこのフラグをチェックし、アクティブでないユーザーに対しては常に False を返します。

私は django-registration (最新の 0.8 アルファ) を使用しており、すべてのデフォルトのバックエンドを使用しています。django-registration の前提全体は is_active フラグに基づいています。つまり、ユーザーがアクティブ化した後にのみ設定されます。ただし、ユーザーがログインすると、django.contrib.auth.views.login が使用されていることがわかります。auth_urls.py のコードからこれを確認できます。

ユーザーが登録したが、まだアクティブ化していない場合、「あなたはアカウントをアクティブ化していません」という行に沿って何かを言うメッセージを表示したい

現在のデフォルトの動作は、「ユーザー名とパスワードが一致しません」というフォームのエラー メッセージです。

ビューでログインデコレータも使用しています

@login_required

私の質問は次のとおりです。

編集:ジェームズとヘンリーに感謝します。質問の説明があまり上手ではなかったと思います。これをやり直しました。

  1. django のドキュメントには、ユーザーのログイン時に is_active が決定要因として使用されていないと書かれています。これは明らかに当てはまりません。自分で試してみてください。これがコードのどこで発生するのかわかりません。誰か知っていますか?私が見る限り、django-registration でも django.contrib.auth でも発生しません。
  2. 上記のエラー メッセージを表示するには、どうすればよいでしょうか。私はdjango-registrationを使用しているため、多くの配管がすでに行われていることに注意してください。これを変更したり、すべてを書き直したりしないでください。可能であれば、私は....「エレガントな」ソリューションを探しています。

前もって感謝します

Q1に関しては、

4

2 に答える 2

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 はフォーム エラーを {{ form.as_table }} のテーブル行として出力します

ありがとうチャンズ(彼の質問から答えが明らかになったので)

1 つのコメント。これに関するドキュメント (少なくとも 1.1 の場合) はひどいものです。これが公式の django ドキュメントでより明確にされていない理由は、私にはわかりません。やりたいことはかなり基本的なことのようです。

于 2011-05-10T05:58:35.130 に答える
0

問題はdjango-registrationにあると思います。

https://bitbucket.org/ubernostrum/django-registration/src/tip/docs/quickstart.rstの 132 行目の情報を参照してください。

非アクティブなユーザーのログインを許可しないと言われています。

アップデート

独自のバックエンドを作成するか、単純なバックエンドを使用して、プロファイル モデルに という新しいプロパティを追加できますactivated。これはかなりの量の作業になります。

どこにあるかというと、 だと思いdjango.contrib.auth.views.loginます。あまり時間をかけて調べていないので、かなり簡単にコピーして独自のものを作成できると思います。(それが本当に問題である場合)

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

編集

違いを確認するために docs 1.2 に行きました

http://docs.djangoproject.com/en/1.2/topics/auth/#django.contrib.auth.models.User.is_active フォームがそれをテストしていることがわかります。したがって、常にそうでしたが、適切に記述されていなかったか、1.2 に更新して忘れたか不明でした。

于 2011-05-09T02:27:22.667 に答える