django allauth login & signup form on homepage

后端 未结 2 1081
甜味超标
甜味超标 2020-12-17 04:44

I have been looking for a solution for some time now and I am not able to wrap my head around this. All I am trying to accomplish is to have the allauth login and signup for

相关标签:
2条回答
  • 2020-12-17 05:06

    these steps worked for me 1. goto allauth\account\views
    In the loginView class under get_context_data function add the the following code signup_form context rendering to the 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
    
    1. in your app views.py

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

      from .views import homepage

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

    3. in your account/login.html

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

    see https://github.com/believeohiozua/django-allauth/blob/master/allauth/account/views.py for sample code

    if you are okay with the above repository you can just install with
    pip install git+https://github.com/believeohiozua/django-allauth.git

    0 讨论(0)
  • 2020-12-17 05:08

    First we take create a custom view using allauth's signup view

    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
    

    Validation errors will not be rendered here for login form, we then need to create a custom LoginView, but for now let's move on to the template

    <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>
    

    Add some javascript to toggle these. The actions point the forms in different directions. Normally we would use formsets for this but since All-auth's signup form is not a Form object this may be the quickest way to do it.

    These all go in views.py of any app you choose, the tags go inside of a template defined in settings.py, TEMPLATE_DIRS or Dirs list in django1.8

    0 讨论(0)
提交回复
热议问题