我认为此错误的问题隐藏在模板中。这是我的表格:
<form class="form-horizontal loginFrm" action="/login/" method="post">
{% csrf_token %}
<div class="control-group">
<input type="text" id="inputEmail" placeholder="Email" name = "username">
</div>
<div class="control-group">
<input type="password" id="inputPassword" placeholder="Password" name = "password">
</div>
<div class="control-group">
<label class="checkbox">
<input type="checkbox"> Remember me
</label>
</div>
<input type="submit" class="btn btn-success" value="Sign in">
</form>
<button class="btn" data-dismiss="modal" aria-hidden="true">Close</button>
我的login
观点:
def login(request):
args = {}
args.update(csrf(request))
if request.POST:
username = request.POST['username']
password = request.POST['password']
user = auth.authenticate(username=username, password=password)
if user is not None:
auth.login(request, user)
args['username'] = username
return HttpResponseRedirect('/', args, context_instance=RequestContext(request))
else:
return HttpResponseRedirect('/', args, context_instance=RequestContext(request))
else:
return HttpResponseRedirect('/',args,context_instance=RequestContext(request))
在我的上一个项目中,它工作正常。但这是错误。
答案 0 :(得分:0)
使用呈现的登录表单查看页面上的html源代码,并确认您有一个带有csrf令牌的隐藏字段。
这样的事情:
<input type='hidden' name='csrfmiddlewaretoken' value='NzYXoXbN9beogdB6gf22rNXkTNQd6Jri' />
您的视图可能没有传递context_instance。这取决于您首先使用哪种方法渲染视图。
您可以使用:
return render_to_response('my_template.html',
context_instance=RequestContext(request))
或者更简单的render()将自动使用RequestContext
return render(request, 'my_template.html')
答案 1 :(得分:0)
作为案例,您可以使用ensure_csrf_cookie视图装饰器。