2

ビューを使用していdjango.contrib.auth.views.login and .logoutます。非常に便利で、箱から出してすぐに使用でき、AAA+などを再度展開できます。

この問題は、個別のログインページを使用していないために発生しますが、すべてのページにログインボックスがあります(もちろん、ユーザーがログインしていない場合)。そのため、ユーザー名とパスワードの組み合わせが間違っていると、エラーが発生します。これらの3つのパスのどれを選択する必要がありますか?

  • 成功だけでなくエラーでも次へリダイレクトする秘密の方法があります。もしそうなら、教えてください!
  • 私は自分のログインビューを作成し、その間にDjangoのメッセージシステムを使用します
  • ログインページを作成して(テンプレートがないだけです)、Django認証システムの素晴らしさを最大限に活用できます。
4

1 に答える 1

3

考えられる解決策の1つ(リストの最初と3番目の選択肢):

  1. 特別なログインページ(つまりdefine registration/login.html)を提供する必要があり、ログインしていないユーザーの場合、通常の各ページにログインフォームがあります。
  2. ユーザーが正常にログインする場合(このロジックはで処理されdjango.contrib.auth.views.loginます):
    • 通常のページの場合:ユーザーをログインしたページにリダイレクトします。
    • ログインページの場合:nextパラメータがある場合はそこにリダイレクトし、そうでない場合はメインページにリダイレクトします。
  3. ユーザーがログインに失敗した場合:エラーが表示された状態でログインページをリダイレクト(または再描画)します。
  4. ユーザーがログインしている場合:通常のページにログアウトへのリンクが表示されます(ユーザーが再ログインしたり、別のアカウントからログインしたりする場合に備えて、特別なページが引き続き表示されます)。

通常のページでは、ログインフォームは次のようになります<input type="hidden" name="next" value="{{ request.path }}" />

プロジェクト設定の場合:

# in settings.py
LOGIN_URL = '/login'     # this should coinside with url pattern of login view
LOGOUT_URL = '/logout'   # same but for logout view
LOGIN_REDIRECT_URL = '/' # url to main page

注意:私はdjangoのビルトインログアウトビューを使用せず、代わりに独自のビューを使用します。ほぼ同じですが、POSTリクエストに対してのみログアウトします。<img src='my_site/logout' />これにより、ユーザーは悪意のあるコードでログアウトできなくなります。

于 2010-12-01T18:25:49.297 に答える