2

私は現在、標準のログインビューのラッパーを持っているDjangoプロジェクトを持っています:

from django.contrib.auth import views as auth_views
from myapp.forms import LoginForm

def login(request, *args, **kwargs):
    """Wrapper for auth.login."""
    kwargs['template_name'] = 'login.html'
    kwargs['authentication_form'] = LoginForm
    auth_view_response = auth_views.login(request, *args, **kwargs)
    return auth_view_response

これはすべて正常に機能しますが、ログインが成功した場合にのみ、次のページの応答コンテキストに何かを追加したいと考えています。方法がわかりません:

  1. が呼び出された後にユーザーが正常にログインしたことを確認するauth_views.login()か、または
  2. 次のページのコンテキストに表示される変数を追加します。
4

2 に答える 2

1

通常、私はSOの質問を投稿してから間もなく答えを思いつきました。

ログインビューでは何もする必要はありませんでした。代わりに、私はuser_logged_in信号を使用します:

from django.contrib.auth.signals import user_logged_in

def post_login_actions(sender, user, request, **kwargs):
        request.session['just_logged_in'] = True

user_logged_in.connect(post_login_actions, dispatch_uid="user_logged_in")

(私はそれを私の最後に置きmyapp/models/userprofile.pyます。)

そして、私はmyapp/context_processors.pyこのようなものを持っています:

from django.conf import settings

def membership_context(request):
    context = {
        'just_logged_in': request.session.get('just_logged_in', False),
    }
    # Now we've used any True setting for this, set it to False subsequent requests:
    request.session['just_logged_in'] = False
    return context

そして、もちろん、それを私の設定に含めてください' TEMPLATE_CONTEXT_PROCESSORS

from django.conf.global_settings import TEMPLATE_CONTEXT_PROCESSORS
TEMPLATE_CONTEXT_PROCESSORS += (
    'myapp.context_processors.membership_context',
)

これで、すべてのテンプレートjust_logged_inのコンテキストに値があります。通常はFalseですが、ユーザーがログインした後の最初のページビューではTrueになります。

于 2013-02-05T14:44:22.953 に答える
1

最初の質問について言えば:

auth_views.login() が呼び出された後、ユーザーが正常にログインしたことを確認する、または

ビュー関数内で、request.user.is_authenticated()

2 番目の質問について言えば、ユーザー セッションに変数を追加して、次のページで確認することができます。

#in the view mentioned above    
if request.user.is_authenticated():
    request.session['some_key'] = "some_var"

#in the view, that represents the next page
foo = request.session.get('some_key',None)
#now you can add foo to template context
于 2013-02-05T14:27:43.383 に答える