为了让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>
...
答案 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不同,它在没有提交表单的情况下显示错误。如果有人能告诉我如何显示错误,那么我会发布一个单独的问题。