【问题标题】:Extracting username and password from form in django从django中的表单中提取用户名和密码
【发布时间】:2015-02-26 06:44:57
【问题描述】:

半年前,我开始在 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

【问题讨论】:

  • 如何生成表单的 HTML?我看不到您输入的 name 属性。
  • 我不太明白你的问题。
  • 如何生成您在问题中发布的表单 HTML?你是在使用 Django 的模板还是手动输入 HTML 代码?
  • 我使用了来自 Bootstrap 的模板。我添加了 csrf_token、action="/auth/" method="post" 和注册按钮。其他一切都来自getbootstrap.com/examples/jumbotron

标签: html django forms twitter-bootstrap django-authentication


【解决方案1】:

您无法从请求对象中获取值的原因是两个输入都没有name 属性。 request.POST.get('username', '') 尝试获取名称属性为 username 的输入的值,在您的情况下该属性不存在。因此,添加一个 name 属性应该会为您完成。

您可以进一步利用 Django 的表单模块,该模块会自动为每个字段生成并分配 name 属性,最终将这些输入绑定回您的登录表单。更多关于这方面的官方docs

【讨论】:

  • 添加了 name="username" 和 name="password",它就像一个魅力。非常感谢!
猜你喜欢
  • 2014-08-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-22
  • 2018-02-21
  • 1970-01-01
  • 2011-05-07
相关资源
最近更新 更多