我正在使用 django-allauth
。我希望登录和注册表单都出现在我的网站首页上,而不是在 '/accounts/login' 或 '/accounts/signup'
我创建了一个独立的应用程序。以下代码位于 views.py
文件中:
from allauth.account.views import SignupView
from allauth.account.forms import LoginForm
class CustomSignupView(SignupView):
# here we add some context to the already existing context
template_name = 'index.html'
def get_context_data(self, **kwargs):
# we get context data from original view
context = super(CustomSignupView,
self).get_context_data(**kwargs)
context['login_form'] = LoginForm() # add form to context
return context
以下内容在
index.html
文件中:
<!DOCTYPE html>
<html>
<head lang="en">
<meta charset="UTF-8">
<title></title>
</head>
<body>
<button id="toggleForms">Toggle Forms</button>
<form method='post' action='/accounts/signup/' id='signup'>
{% csrf_token %}
<h1>blah</h1>
{{ form.as_p }}
<input type='submit' value='Sign Up'>
</form>
<form method='post' action='/accounts/login/' id='login'>
{% csrf_token %}
{{ login_form.as_p }}
<input type='submit' value='Log In'>
</form>
</body>
</html>
表单只有在输入正确时才能正常工作,即表单有效。问题在于当验证失败时(例如凭证不正确),用户会被重定向到accounts/login并显示错误消息。如何停止此重定向并在主页上显示错误消息?
action='/accounts/login/'
将登录详细信息发布到不同的URL。让用户返回提交表单的页面比较棘手。这将需要更改登录视图和注册视图。如果您真的不想在登录页面上显示错误,则更好的方法可能是将登录详细信息提交为Ajax请求。 - Alasdair