我的登录视图一直表示"用户已使用此电子邮件。"

时间:2018-05-03 23:01:07

标签: django

我有一个自定义的用户模型

class User(AbstractBaseUser):
   email       = _models.EmailField     (max_length=252, unique=True)
   username    = _models.CharField      (max_length=252, blank=True, null=True)
   staff       = _models.BooleanField   (default=False)
   superuser   = _models.BooleanField   (default=False)
   active      = _models.BooleanField   (default=True)

   USERNAME_FIELD = 'email'

这是表格

class UserLoginForm(_f.ModelForm):
    password = _f.CharField(widget=_f.PasswordInput())

    class Meta:
        model = User
        fields = ['email', 'password']

这是视图

from django.contrib.auth import authenticate, login
from django.views.generic import FormView,
from .forms import UserRegistrationForm, UserLoginForm
class UserLoginView(FormView):
    form_class = UserLoginForm
    success_url = '/'
    template_name = 'accounts/user_login.html'

    def form_valid(self, form):
        email = form.cleaned_data.get('email')
        password = form.cleaned_data.get('password')
        user = authenticate(request=self.request, email=email, password=password)

        if user:
            login(self.request, user)
            return super(UserLoginView, self).form_valid(form)

        return super(UserLoginView, self).form_invalid(form)

应用的urls.py

from django.urls import path
from .views import UserLoginView, UserRegistrationView
app_name = 'accounts'
urlpatterns = [
    path('login/', UserLoginView.as_view(), name='login'),
    path('register/', UserRegistrationView.as_view(), name='register'),
]

项目的urls.py

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', include('applications.accounts.urls', namespace='namespace_accounts')),
]

此视图user_login.html

的模板UserLoginView
{% extends 'accounts/login_base.html' %}
{% load staticfiles %}

{% block content %}
<form method="POST">
    <div class="form-group">
        {% csrf_token %}
        {{ form.as_p }}
    </div>
    <button type="submit" class="btn btn-dark">Login</button>
</form>
{% endblock %}

以新用户身份注册后,用户将被重定向到登录页面,凭据凭据,登录名一直显示&#34;用户已使用此电子邮件。&#34;

注意:模型email上的User字段是唯一的。

很明显,登录页面试图以某种方式进行另一次注册,而且这个&#34;某种程度上&#34;这让我很困惑。

我可以做些什么来解决这个问题&#34;使用此电子邮件的用户已经存在。&#34;?

1 个答案:

答案 0 :(得分:0)

我怀疑,UserLoginView试图再次注册,即再次创建新用户,而不是进行身份验证并进行登录。发生这种情况是因为我的表格继承自forms.ModelForm;从forms.ModelForm更改为forms.Form解决了问题。

归功于这个问题的Answer