Allauth在主页上登录无效

时间:2017-01-04 20:53:37

标签: python django django-forms django-allauth

为了让Django的allauth能够在我的主页上工作,我将登录和注册表单的allauth HTML复制到我自己的base.html(可以看到登录表单here)。

因此,这会在我的主页上成功呈现表单及其字段。但是,当我在登录表单上单击“提交”时,它只会将我重定向到allauth的/ accounts / login URL,这会呈现相同的表单。只有在那之后才提交表单工作。当我在我的主页上提交注册表单时,它与注册表单相同,它将我重定向到/ accounts / signup,然后在再次提交后注册工作。如何从我的主页开始登录/注册?

我的网址和观点:

urls.py

urlpatterns = [
    url(r'^$', views.boxes_view, name='news'),
    url(r'^accounts/', include('allauth.urls')),
]

views.py

def boxes_view(request):
   search = request.GET.get('search')
   posts = Post.objects.all().filter(category=1).order_by('-date')
   if search:
      posts = posts.filter(Q(title__icontains=search)|Q(content__icontains=search))
   else:
      posts = Post.objects.all().filter(category=1).order_by('-date')

   context = {'posts': posts,}
   return render(request, 'polls.html', context)

base.html文件

...

{% load i18n %}
<form class="login" method="POST" action="{% url 'account_login' %}">
<div class="loginWrapper">
    <div class="loginNested">
    <div class="loginBox">
  {% csrf_token %}
  {{ form.as_p }}
  {% if redirect_field_value %}
  <input type="hidden" name="{{ redirect_field_name }}" value="{{ redirect_field_value }}" />
  {% endif %}
  <a class="button secondaryAction" href="{% url 'account_reset_password' %}">{% trans "Forgot Password?" %}</a>
  <button class="primaryAction" type="submit">{% trans "Sign In" %}</button>
</div>
</div>
</div>
</form>

...

1 个答案:

答案 0 :(得分:1)

通过在我的视图中作为上下文传递表单来管理以修复它:

    from allauth.account.forms import LoginForm, SignupForm

    allauth_login = LoginForm(request.POST or None)
    allauth_signup = SignupForm(request.POST or None)


    context = {
        'posts': posts,
        'allauth_login': allauth_login,
        'allauth_signup': allauth_signup
    }

然后在我的模板中替换{{ form.as_p }} {{ allauth_login }}

<form class="login" method="POST" action="{% url 'account_login' %}">
<div class="loginWrapper">
    <div class="loginNested">
    <div class="loginBox">
  {% csrf_token %}
  {{ allauth_login }}
  {% if redirect_field_value %}
  <input type="hidden" name="{{ redirect_field_name }}" value="{{ redirect_field_value }}" />
  {% endif %}
  <a class="button secondaryAction" href="{% url 'account_reset_password' %}">{% trans "Forgot Password?" %}</a>
  <button class="primaryAction" type="submit">{% trans "Sign In" %}</button>
</div>
</div>
</div>
</form>

此方法仅在正确输入凭据时有效。因此,当输入正确时,表单成功提交并登录/注册。但是,如果输入的凭据输入不正确,或者已经用于注册等用户名,则无论如何都会提交表单并将我重定向到/ accounts / login或/ accounts / signup。这与正常的allauth不同,它在没有提交表单的情况下显示错误。如果有人能告诉我如何显示错误,那么我会发布一个单独的问题。