Django登录后为什么request.user总是匿名的?

Django登录后为什么request.user总是匿名的?,django,Django,我想在登录后重定向主页,但request.user始终是匿名的。错误隐藏在哪里? 守则: url.py 我有一个名为forms.py的登录表单 class LoginForm(forms.Form): username = forms.CharField(required=True, label='', max_length=12, error_messages={'required':'username'},

我想在登录后重定向主页,但request.user始终是匿名的。错误隐藏在哪里?

守则: url.py

我有一个名为forms.py的登录表单

class LoginForm(forms.Form):
    username = forms.CharField(required=True,
            label='',
            max_length=12,
            error_messages={'required':'username'},
            widget=forms.TextInput(
                attrs={'placeholder':'username',
                       'class':'form-control'}))
    password = forms.CharField(required=True,
            label='',
            max_length=12,
            min_length=6,
            error_messages={'required':'password'},
            widget=forms.PasswordInput(
                attrs={'placeholder':'password',
                       'class':'form-control'}))

    def clean(self):
        if not self.is_valid():
            raise forms.ValidationError('username and password are required')
        else:
            cleaned_data = super().clean() 
查看文件:

def login_view(request):
    if request.method == 'GET':  
        form = LoginForm(auto_id=False)  
        return render_to_response('game/login.html',
                RequestContext(request, {'form': form,}))
    else:  
        form = LoginForm(request.POST)  
        if form.is_valid():  
            username = request.POST.get('username', '')  
            password = request.POST.get('password', '')  
            user = auth.authenticate(username=username,
                                     password=password)  
            if user is not None and user.is_active:  
                auth.login(request, user)  
                return render_to_response('game/main.html',
                        context_instance=RequestContext(request))
            else:  
                return render_to_response('game/login.html',
                    RequestContext(request, 
                        {'form': form,'password_is_wrong':True}))  
        else:  
            return render_to_response('weapon/login.html',
                    RequestContext(request, {'form': form,}))  

@login_required(login_url='/game/login/')
def main_view(request):
    user = request.user
    return render_to_response('weapon/main.html',
                     {'user':user},
                     context_instance=RequestContext(request))
login.html包括:

<form class="form-signin" role="form" action="{% url 'game:main'  %}" method="post">
      {% csrf_token %}

        <h2 class="form-signin-heading">Login in</h2>
         {{ form.as_p }} 
        <label class="checkbox">
          <input type="checkbox" value="remember-me"> remember me
        </label>
        <button class="btn btn-lg btn-primary btn-block" type="submit">Login</button>
      </form>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
 {% if user.is_authenticated %}
    {{ user.username }} Successful
{% else %}
    failed
{% endif %}  
</body>
</html>

{%csrf_令牌%}
登录
{{form.as_p}}
记得我吗
登录
main.html包括:

<form class="form-signin" role="form" action="{% url 'game:main'  %}" method="post">
      {% csrf_token %}

        <h2 class="form-signin-heading">Login in</h2>
         {{ form.as_p }} 
        <label class="checkbox">
          <input type="checkbox" value="remember-me"> remember me
        </label>
        <button class="btn btn-lg btn-primary btn-block" type="submit">Login</button>
      </form>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
 {% if user.is_authenticated %}
    {{ user.username }} Successful
{% else %}
    failed
{% endif %}  
</body>
</html>

在此处插入标题
{%if user.u经过身份验证%}
{{user.username}}成功
{%else%}
失败
{%endif%}

任何建议都将不胜感激。

登录后,您将用户重定向到
game/main.html
,而我认为您应该将用户重定向到
main\u视图

views.py中的代码块应为:-

编辑:

if user is not None and user.is_active:  
    auth.login(request, user)  
    return HttpResponseRedirect('/game/main')

登录模板中的表单指向主视图
action=“{%url”game:main“%}”
而不是登录视图,您的表单永远不会得到处理

您应该将其指向同一个登录视图来处理身份验证,只需使用
action=“.”“
将其保持在与登录视图相同的URL上,或者使用与main相同的技术将其指向,即

urlpatterns = patterns('',
   url(r'^login/$', login_view, name='login'),
   url(r'^main/$', main_view, name='main'),
)
在模板中:

action="{% url 'game:login'  %}"

编辑了我的响应,请改为尝试HttpResponseRedirect。如果我按以下方式编写,并按以前方式编写登录视图,则无需登录即可工作,如果添加登录视图,则当前无法工作:def main\u视图(请求):username=request.POST['username']user=user.objects.get(username=username)返回render_to_响应('game/main.html',{'user':user},context_实例=RequestContext(请求))我认为您的登录url应该指向一个视图,在该视图中,您应该检查用户是否已通过身份验证,然后重定向到主视图,否则重定向到登录。当前,您正在将每个响应重定向到某个无法工作的html页面。此外,在
login\u视图中
每个GET请求都会转发到登录页面,因此即使用户已通过身份验证诱惑他会看到登录页面。其实我也有同样的问题,你明白了吗?