0

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

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

我认为这个例子很接近,但我不能让它工作:django - 当视图需要一个参数时,表单操作参数是什么?

将提交按钮的 formaction 属性发送到不同 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>

此代码是直接从我的登录页面复制的,它可以正常工作。

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

4

2 回答 2

1

感谢这里和Pythonanywhere上的一些反馈,我已经能够解决这个问题。

由于登录在 /accounts/login/ 页面上正常工作,因此我已将其缩小为传递 HTML 的问题。我发现从标题登录只能在 /accounts/login/ 上工作,但其他页面却没有,这意味着传递到页面肯定有问题。

问题最终是我有一个名为“action”的输入属性,而它应该是“formaction”。我知道它真的很近,而且会像那样愚蠢:-)

于 2013-10-20T15:12:24.607 回答
0

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

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

于 2013-10-19T18:22:15.893 回答