Django登录后为什么request.user总是匿名的?
我想在登录后重定向主页,但request.user始终是匿名的。错误隐藏在哪里? 守则: url.py 我有一个名为forms.py的登录表单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'},
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请求都会转发到登录页面,因此即使用户已通过身份验证诱惑他会看到登录页面。其实我也有同样的问题,你明白了吗?