Django登录发送空用户名

时间:2013-06-17 04:56:09

标签: django

我在登录模板

中使用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:Admin(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/')

它有效。因此,重定向时请求对象保留用户信息......但这不是解决方案

1 个答案:

答案 0 :(得分:0)

尝试将template_name放入网址中... url(r'^ login / $','django.contrib.auth.views.login',{'template_name':'login.html'}),

为什么不使用django-registration(它适用于Django 1.4.5)