半年前我开始在Django开展一个项目,并把它放在后面,因为我无法弄清楚一个小细节,但我重新回到了这个项目,并认为我可能会在这里得到快速反应。
我的网站工具栏中有一个迷你表单,该表单由以下HTML生成:
<form action="/auth/" method="post" class="navbar-form navbar-right" role="form"> {% csrf_token %}
<div class="form-group">
<input type="text" placeholder="Email" class="form-control">
</div>
<div class="form-group">
<input type="password" placeholder="Password" class="form-control">
</div>
<button type="submit" class="btn btn-primary">Login</button>
<a class="btn btn-primary" href="/register/">Signup</a>
</form>
目标是避免单独的登录页面,只需将其保留在顶部,直到用户登录。
目标是使用Django的身份验证来记录此用户。
def auth_view(request):
email = request.POST.get('username', '')
password = request.POST.get('password', '')
print "username is ", email, "password is ", password
user = auth.authenticate(username=email, password=password)
if user is not None:
auth.login(request, user)
return HttpResponseRedirect('/loggedin/')
else:
return HttpResponseRedirect('/invalid/')
以上代码是我想要处理点击登录按钮的代码,由我的urls.py提供。 但是,无论何时我提交表单,我的调试语句总是说电子邮件和密码是空字符串。因此,我必须从表单中错误地提取信息。
我如何成功登录?请帮忙!
谢谢, erip
答案 0 :(得分:2)
您无法从请求对象中获取值的原因是两个输入都没有name
属性。 request.POST.get('username', '')
尝试获取名称属性为username
的输入值,在您的情况下,该属性不存在。因此,添加name
属性,应该为您完成。
您可以进一步利用Django的表单模块,该模块自动为每个字段生成并分配name
属性,最终将这些输入绑定回您的登录表单。关于官方docs的更多信息。