使用Django allauth在首页上进行登录和注册

3

我正在使用 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
OAuth登录可以使用ajax完成吗?如果是,那么如何实现? - utkbansal
我不确定是否可能,它可能很棘手实现。 - Alasdair
也许我被限制在默认的URL上了? - utkbansal
我认为你想做的是可能的,但需要大量定制allauth,而且可能不值得这样做。 - Alasdair
1个回答

0

可能更容易覆盖模板,使其看起来像您的索引页面。您可以指定一个名称为('account/login.html')的模板,或者指定自己版本的URL,使用完全不同的模板:

from allauth.account.views import LoginView

...
    url(r'^my-login/$', LoginView.as_view(template_name="index.html"), name="my-login"),
...

这两个都不是allauth的公共API的一部分,因此使用它们需要自担风险...


是的,我可以覆盖模板并在不同的URL上使用它,但我想要的是在同一页上显示登录和注册。我认为如果不涉及视图,我无法做到这一点? - utkbansal

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接