0

django.contrib.auth.views.loginログインテンプレートでこのようなフォームを使用しています

    <form method="post" action="/login/" id="loginform">{% csrf_token %}
        <label for="id_username">Username:</label>
        <br>
        {{ form.username }}
        <br>
        <label for="id_password">Password:</label>
        <br>
        {{ form.password }}
        <br>
        <input type="hidden" name="next" value="/redirect/">
        <input type='button' class='button' value='Sign In'>
    </form>

urls.pyは次のようなものです:

url(r'^login/$', 'django.contrib.auth.views.login'),
url(r'^redirect/$', redirect)

私の見解は次のとおりです。

def redirect(request):
    logging.debug('user logging in: %s' %request.user.username)
    username = request.user.username
    try:
        user = User.objects.get(username=username)
[...]

問題は、リクエストのユーザー名が空であることです。そのため、常にエラーが発生しますuser = User.objects.get(username=username)

どのようにそれが起こったのですか?

PS: 管理者 (django contrib admin) のログインも同じ理由で失敗します

更新:ログファイルでこれを取得します:

2013-06-17 07:11:01,932 DEBUG request user is: AnonymousUser

更新 2:

これも settings.py から貼り付けます。

MIDDLEWARE_CLASSES = (
     'django.middleware.cache.UpdateCacheMiddleware',
     'django.middleware.common.CommonMiddleware',
     'django.contrib.sessions.middleware.SessionMiddleware',
     'django.middleware.csrf.CsrfViewMiddleware',
     'django.contrib.auth.middleware.AuthenticationMiddleware',
     'django.contrib.messages.middleware.MessageMiddleware',
     'main.common.tz_middleware.TimezoneMiddleware',
     'main.common.sslMiddleware.SSLRedirect',
     'django.middleware.cache.FetchFromCacheMiddleware',
)

更新 3: 事態はますますばかげています。redirect関数をこれに置き換えました:

def redirect(request):
    return HttpResponseRedirect('/home/')

そしてそれは動作します。したがって、リダイレクトされたときのリクエストオブジェクトはユーザー情報を保持します...ただし、これは解決策ではありません

4

1 に答える 1

0

template_name を URL に入れてみてください... url(r'^login/$', 'django.contrib.auth.views.login', {'template_name': 'login.html'}),

そして、django-registration を使用してみませんか (Django 1.4.5 で動作します)。

于 2013-06-17T05:18:45.407 に答える