LoginForm выдает неизвестную ошибку проверки в Django - PullRequest
0 голосов
/ 21 мая 2019

Я создал форму входа и регистрации модели.Форма регистрации работает нормально, но когда я отправляю форму входа, она показывает ошибку проверки

«Пользователь с этим электронным письмом уже существует»

, который я не определил.Вместо перенаправления на URL успеха, страница просто перезагружается с ошибкой проверки.

Любые предложения приветствуются.

enter image description here

forms.py

class LoginForm(forms.ModelForm):
    email = forms.EmailField(max_length=100, widget=forms.TextInput(attrs={'class': "form-control",
                                                                           'placeholder': "Email"}), required=True)
    password = forms.CharField(widget=forms.PasswordInput(attrs={'class': "form-control",
                                                                 'placeholder': "Password",
                                                                 'name':"login_password"}), required=True)

    class Meta:
        model = CustomUser
        fields = ('email','password',)

Views.py

class LoginView(FormView):
    model = CustomUser
    form_class = LoginForm
    success_url = reverse_lazy('first_app:home')
    template_name = 'login.html'

    def form_valid(self, form):
        print('Inside form_valid of LoginView')
        email = form.cleaned_data.get('email')
        passw = form.cleaned_data.get('password')
        print('1')
        user = authenticate(username=email,password=passw)
        print('2')
        login_auth(self.request,user)
        messages.success(self.request,'Logged in successfully')
        return redirect('first_app:home')

Шаблон

<form method="post" action="{% url 'users:login' %}">
    {% csrf_token %}
    <h2 class="text-center">Sign In</h2>

    {% for error in form.email.errors %}
      <div class="alert alert-danger alert-dismissible" role="alert">
        {{ error }}
      </div>
    {% endfor %}

    <div class="form-group">
        <div class="input-group">
            <span class="input-group-addon"><i class="fa fa-envelope"></i></span>
            {{ form.email }}
        </div>
    </div>

    {% for error in form.password.errors %}
      <div class="alert alert-danger alert-dismissible" role="alert">
        {{ error }}
      </div>
    {% endfor %}
    <div class="form-group">
        <div class="input-group">
            <span class="input-group-addon" style="padding-right: 15px;padding-left: 16px"><i class="fa fa-lock"></i></span>
            {{ form.password }}
        </div>
    </div>
    <div class="form-group">
        <button type="submit" class="btn-login btn-primary btn-block">Login</button>
    </div>
    <div class="clearfix">
        <p class="text-center small">Don't have an account? <a href="{% url 'users:signup' %}">Register</a></p>

    </div>
</form>

Модель

class CustomUser(AbstractUser):
    """CustomUser model."""
    username = None
    name = models.CharField(max_length=100)
    email = models.EmailField(_('email address'), unique=True)

    USERNAME_FIELD = 'email'
    REQUIRED_FIELDS = []

Urls.py

urlpatterns = [
    path('signup/', views.RegisterView.as_view(), name='signup'),
    path('login/', views.LoginView.as_view(), name='login'),
    ]

Ответы [ 2 ]

2 голосов
/ 21 мая 2019

Попробуйте добавить 'name': "login_email" в столбец электронной почты вашей страницы forms.py. Я думаю, что это поможет.

1 голос
/ 21 мая 2019

Не используйте ModelForm в качестве формы входа - ваша форма пытается создать новый CustomUser вместо того, чтобы просто использовать данные для аутентификации. Вместо этого измените его на Form.

Вторая проблема заключается в том, что вы пытаетесь получить неправильные поля. Используйте это:

email = form.cleaned_data.get('email')
passw = form.cleaned_data.get('password')
...