Django在标题中登录表单

时间:2013-10-19 17:06:52

标签: django authentication pythonanywhere

我有一个通用的登录表单,可以使用django.contrib.auth.views中的登录模块完美地运行

我想要做的是如果用户未经过身份验证,则可以从网站标题(包含在所有页面中)中看到登录下拉列表。如果用户未经过身份验证,我的下拉列表工作正常,但在填写用户名/密码后,没有任何反应。

我认为这个例子很接近,但我无法让它发挥作用:django - what goes into the form action parameter when view requires a parameter?

将提交按钮的格式属性发送到不同的URL的方法是否正确?是否有另一种首选方法来实现这一目标?

#relevant form code from the header.html include
<form action="" method="post" class="submission-form">
  {% if form.errors %}
    <p class="error">Sorry, that is not a valid username or password</p>
  {% endif %}
    <label for="username">User name:</label>
    <input type="text" name="username" id="username">
    <label for="password">Password:</label>
    <input type="password" name="password" id="password">

    <input type="submit" value="login" action="http://mysite.com/accounts/login/" />{% csrf_token %}
    <input type="hidden" name="next" value="{{ next|escape }}" />
  </form>

此代码直接从我的登录页面复制,该页面正常运行。

让我知道有助于回答问题的任何其他代码。

2 个答案:

答案 0 :(得分:1)

感谢此处及Pythonanywhere提供的一些反馈意见,我已经能够解决此问题。

由于登录在/ accounts / login /页面上正常运行,我已将其缩小到传递HTML的问题。我发现从头部登录只能在/ accounts / login /上工作,但其他页面没有,所以这意味着确实存在传递给页面的问题。

问题最终是我有一个名为&#34; action&#34;的输入属性,它应该是&#34; formaction&#34;。我知道它非常接近,这将是一种愚蠢的东西: - )

答案 1 :(得分:0)

将表单的action属性设置为与正在查看的当前视图不同的URL,以便执行登录,这绝对没有错。

您可以随时将用户直接带回他们正在查看的页面,方法是将表单中的next隐藏字段设置为当前URL的值,然后将其传递给内置登录视图,或者将它们重定向到其他地方......这完全取决于你。