0

こんにちは、私は自分のプロジェクトに django inbult auth url とビューを使用し、最初のユーザー アカウントの作成/ログイン/パスワードのリセット プロセスを完了しました。

これで、ユーザーはログインでき、ログイン成功後に URL accounts/profile/ にリダイレクトされます。

django のログイン機能についていくつか疑問があります。便宜上、以下の django 組み込みログイン関数コードをコピーして貼り付けました。

@sensitive_post_parameters()
@csrf_protect
@never_cache
def login(request, template_name='registration/login.html',
          redirect_field_name=REDIRECT_FIELD_NAME,
          authentication_form=AuthenticationForm,
          current_app=None, extra_context=None):
    """
    Displays the login form and handles the login action.
    """
    redirect_to = request.REQUEST.get(redirect_field_name, '')

    if request.method == "POST":
        form = authentication_form(request, data=request.POST)
        if form.is_valid():

            # Ensure the user-originating redirection url is safe.
            if not is_safe_url(url=redirect_to, host=request.get_host()):
                redirect_to = resolve_url(settings.LOGIN_REDIRECT_URL)

            # Okay, security check complete. Log the user in.
            auth_login(request, form.get_user())

            return HttpResponseRedirect(redirect_to)
    else:
        form = authentication_form(request)

    current_site = get_current_site(request)

    context = {
        'form': form,
        redirect_field_name: redirect_to,
        'site': current_site,
        'site_name': current_site.name,
    }
    if extra_context is not None:
        context.update(extra_context)
    return TemplateResponse(request, template_name, context,
                            current_app=current_app)

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

1REDIRECT_FIELD_NAME関数内の は '/profile/' として設定されていdjango.contrib.authますか?

この変数がからインポートされていることがわかりましたdjango.contrib.auth

from django.contrib.auth import REDIRECT_FIELD_NAME, login as auth_login, logout as auth_logout, get_user_model

この変数の設定はありませんが、ユーザーが正常にログインすると、ページは /accounts/profile/ にリダイレクトされます

2 ログイン機能はユーザーのアカウント情報を渡しましたか? はいの場合、どうすればアクセスできますか?

コードから、ユーザーが正常にログインすると、ページがリダイレクトされます。return HttpResponseRedirect(redirect_to)

私の場合、 accounts/profile/ にリダイレクトされました。当初、URL のビューは単に

HttpResponse("You have logged in successfully")

ビュー機能を実装しようとすると、ユーザーに関する情報が渡されていないことに気付きました。

ビュー機能を試してみましprint requestたが、サーバー端末に出力されたメッセージにはユーザーに関する情報がありません。システム設定やその他の情報の長いリストしか表示されません。ただし、ログインは、ログインに成功したばかりのユーザーの情報を正常にログインした URL に渡す必要がありますか?

説明していただきありがとうございます。

4

3 に答える 3

4

request.userログイン後、ビューと{{user}}テンプレートで参照するだけでユーザー情報にアクセスできます。確認する必要があるのは、将来のリクエストRequestContextのために を渡していることだけです。HttpResponse

はい、 django.contrib.auth でREDIRECT_FIELD_NAME定義されています。__init__.pyこれは単に"next"ログイン フォームから渡したものです。

Django では、ユーザーにログインを強制する方法が複数あります。ビュー関数を で装飾する@login_required、ユーザー定義 URL に対して組み込みのログイン ビューを呼び出すなど、ログイン設定変数についてはこちらを参照してください。さらにいくつかのアイデアが得られます。

カスタムログインページの構築。そのリンクは、カスタムログインの実装の例を示しています。ビューを で装飾し、@login_required対応する URL が であるとします/login_test/。次に、{{next}}ログイン フォームのコンテキスト変数が でレンダリングされます/login_test/。そのため、ログイン後、

<input type="hidden" name="next" value="{{ next }}" />

この要素の値は、 に従ってリダイレクトに使用されREDIRECT_FIELD_NAMEます。settings.LOGIN_URLその例にはto the URLの設定が欠けていると思いますがlogin/。気にしないでください。デコレータ自体の引数として渡されます。

于 2013-07-04T05:07:49.553 に答える
1

ユーザーが accounts/profile/ にリダイレクトされると、そのリンクのビューが返されます。を使用して、この投稿に従って、現在ログインしているユーザーに関する情報にアクセスできますrequest.user。また、ビューでアクセスできる情報を確認するためのヒント。を使用しimport pbd; pdb.set_trace()ます。これにより、現在のすべての変数にアクセスできる Python プロンプトが表示されます。定義されたすべての変数を表示するには、 を呼び出しますlocals()が、これは大量のがらくたを一緒に出力します。テンプレートでは、ユーザーがログインしていない場合、「このページにアクセスできません」というメッセージを表示できます

于 2013-07-04T05:07:31.160 に答える