在主页上使用Django Allauth登录和注册表单

5

我已经寻找解决方案一段时间了,但是我无法理解这个问题。我想要实现的只是在首页上同时拥有allauth登录和注册表单,而不是放在/账户网址下。是否有任何人有相关经验或者能够分享或指导我找到解决方案?非常感谢您的帮助。

2个回答

7

首先,我们使用allauth的注册视图创建一个自定义视图

from allauth.accounts.views import SignupView
from allauth.accounts.forms import LoginForm


class CustomSignupView(SignupView):
    # here we add some context to the already existing context
    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

这里不会呈现登录表单的验证错误,因此我们需要创建一个自定义的LoginView,但现在让我们继续前往模板。

<button id="toggleForms">Toggle Forms</button> 
<form method='post' action='{% url 'yourviewurl %}' id='signup'>
  {% csrf_token %}
  {{ form.as_p }}
  <input type='submit' value='Sign Up'>
</form>

<form method='post' action='{% url 'loginurl' %}' id='login'  hidden="hidden">
  {% csrf_token %}
  {{ login_form.as_p }}
  <input type='submit' value='Log In'>
</form>

添加一些JavaScript来切换这些表单。 这些操作将表单指向不同的方向。 通常我们会使用formsets,但由于All-auth的注册表单不是Form对象,因此这可能是最快的方法。

这些都放在您选择的任何应用程序的views.py中,标记放在定义在settings.py中的模板内,TEMPLATE_DIRS或Django1.8中的Dirs列表中。


谢谢您的帮助,但是您能否解释一下代码应该放在哪些文件中?我在这里找到了一个类似的方法http://notesbyanerd.com/joint-login-and-signup-django-allauth-view。看起来您的解决方案也是建议相同的。但出于某种原因,对我来说从未调用def get_context_data。似乎我可能会混淆一些东西。如果您能更详细地阐述您的解决方案,那就太好了。感谢您的时间! - janbrot
视图功能代码可以放在Django项目中任何一个app的views.py文件中,而模板则可以通过设定settings.py文件中TEMPLATES_DIRS元组或Dirs列表来进行定义。Django 1.8版本及以上均适用。 - Mikeec3
对于任何尝试这样做的人,请注意:我不得不执行“from allauth.account.views import *”和“from allauth.account.forms import LoginForm”,而不是这里显示的内容。 - Michelle Glauser
@Mikeec3,那个类视图运行良好,但无法显示错误,如何实现错误呢?有人能给一些想法吗? - OmPrakash
最近我有很多事情要做,一直在使用Django开发ELM项目,所以最近没有在SO上出现。我会在几天内写一个关于如何自定义all auth的快速教程,并在这里分享链接。 - Mikeec3
显示剩余2条评论

0

以下步骤适用于我: 1. 进入 allauth\account\views 目录
loginView 类 中的 get_context_data 函数下添加以下代码,将signup_form 上下文渲染到 ret 中。

ret.update({"signup_url": signup_url,
                "site": site,                   
                "redirect_field_name": self.redirect_field_name,
                "redirect_field_value": redirect_field_value,
                -->"signup_form":get_form_class(app_settings.FORMS, 'signup',SignupForm)<--
})return ret
  • 在您的应用程序views.py中

    def homepage(request):
        template = 'account/login.html'
        context ={}
        return render(request, template, context)
    
  • 您的urls.py

    from .views import homepage

    path('', homepage, name='home'),

  • 在您的account/login.html中

    {% include "account/signup.html" with form=signup_form %}

  • 请查看https://github.com/believeohiozua/django-allauth/blob/master/allauth/account/views.py获取示例代码

    如果您对上述存储库感到满意,只需使用以下命令进行安装:
    pip install git+https://github.com/believeohiozua/django-allauth.git


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