2

私は django ログイン ビューを作成しています。これは、一般的なものを再利用してほとんどの面倒な作業を行いますが、後でいくつかの詳細を処理します。

COMPANY_COOKIE = 'last_login_company_id'

def login(request, *args, **kwargs):
    initial_company_id = request.COOKIES[COMPANY_COOKIE] if COMPANY_COOKIE in request.COOKIES else None
    def makeCompanyAuthenticationForm(*args, **kwargs):
        kwargs.setdefault('initial', {})
        initial = kwargs['initial']
        initial['company'] = initial_company_id
        return CompanyAuthenticationForm(*args, **kwargs)

    kwargs['authentication_form'] = makeCompanyAuthenticationForm
    response = django_login(request, *args, **kwargs)

    if request.method == 'POST' and request.user.is_authenticated():
        request.session['user_menu'] = get_user_menu()
        if 'company' in request.POST:
            log.debug("Storing user company %s in cookie %s", request.POST['company'], COMPANY_COOKIE)
            response.set_cookie(COMPANY_COOKIE, request.POST['company'])
        request.session.save()
    return response

カスタム フォームで既定の会社を設定するメカニズムについてのコメントはさておき、なぜ myCOMPANY_COOKIEが設定されていないのか疑問に思っています。

に設定して Django デバッグ ツールバーINTERCEPT_REDIRECTSTrue使用しています。ログ ステートメントが呼び出されていることがわかります。set_cookie の後に pdb.set_trace() を挿入すると、response.cookies に会社 ID Cookie が含まれていることがわかります。ただし、私のブラウザにはそれがありません。DjDT では、リクエストの COOKIES 変数に Cookie が含まれていないことがわかります。Chrome のストレージ インスペクタでも同じことがわかります。last_login_company_idどこにもクッキーはありません。

これが設定されないのはなぜですか?

4

1 に答える 1

1

簡単な答え; django-debug-toolbarにバグがあります:

http://github.com/robhudson/django-debug-toolbar/issues/#issue/6

Intercept_redirectsが無効になっている場合、これはすべて機能します。

于 2010-09-15T21:40:44.900 に答える