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