Django поднимает формы ValidationError не работает

Это может быть повторяющийся вопрос, однако я не нашел решения для своей проблемы. Проблема связана с моей проверкой UserLoginForm. «поднять формы. ValidationError» не работает и не выдает ошибку. Все остальное работает идеально.

Блок проверки моей формы

    def clean(self):
        cleanedData= super(UserLoginForm, self).clean()
        username= cleanedData.get('username')
        password = cleanedData.get('password')

        if User.objects.filter(username=username).exists() is False:
            print("User not available Validation should trigger")
            raise forms.ValidationError('User does not exists.')
        else:
            user = authenticate(username=username, password=password)
            if user is None:
                print("Authentication Failed Validation should trigger")
                raise forms.ValidationError('Invalid Credentials.')

Views.py

def signin(request):
    if request.method == 'POST':
        form= UserLoginForm(request.POST)
        if form.is_valid():
            username= str(form.cleaned_data['username']).lower()
            password= form.cleaned_data['password']

            user= authenticate(username= username, password= password)
            if user:
                if user.is_active:
                    login(request, user)
                    return HttpResponseRedirect(reverse_lazy('testapp:index'))
                else:
                    return HttpResponse('User Not Active')
            else:
                return HttpResponse('Login Unsuccessful.')
        else:
            return HttpResponse('Form not valid')
    elif request.method == 'GET':
        if request.user.is_authenticated:
            return HttpResponseRedirect(reverse_lazy('testapp:index'))
        else:
            form= UserLoginForm()
    return render(request, 'signin.html', {'form': form})

HTML-шаблон

{% extends "base.html" %}
{% load static %}
{% block bodyblock %}
    <div class = "container">
        <img src = "{% static "images/face.png" %}" alt = "image no found">
        <div class = "heading">
            <h1>Login</h1>
        </div>
        <form action = "" method = "post" id = "signinForm">
            {% csrf_token %}
            <div class = "form-input">
                <i class = "fas fa-user"></i>
                {{ form.username }}
            </div>
            {% if form.username.errors %}
                <span>{{ form.username.errors }}</span>
            {% endif %}
            <div class = "form-input">
                <i class = "fas fa-lock"></i>
                {{ form.password }}
            </div>
            {% if form.password.errors %}
                <span>{{ form.password.errors }}</span>
            {% endif %}

            {{ form.non_field_errors }}
            {{ form.source.errors }}
            {{ form.source }}

            <div class = "form-submit">
                <input type = "submit" value = "Sign In">
            </div>
        </form>
    </div>
{% endblock bodyblock %}

Чтобы поймать ошибки, я использую все 3 ({{ form.non_field_errors }}, {{ form.source.errors }}, {{ form.source }}) в своем HTML-шаблоне.

Я могу видеть «Пользователь недоступен. Проверка должна сработать» и «Сбой проверки подлинности должна сработать», но вызов VailidationError не работает.

Пожалуйста, покажите вид.

Daniel Roseman 09.03.2019 12:19

@Daniel Roseman Добавил представление

user3941871 09.03.2019 12:42

Но вы никогда не визуализируете шаблон снова после публикации. Итак, где вы ожидаете, что эти ошибки будут отображаться?

Daniel Roseman 09.03.2019 12:43

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

user3941871 09.03.2019 12:49

@KartikPunde, для какого поля в форме вы хотите добавить проверки

rahul.m 09.03.2019 13:04

Шаблон нет проблема. По вашему мнению, когда форма недействительна, все, что вы делаете, это делаете return HttpResponse('Login Unsuccessful.'). Таким образом, вы будете никогда не видел этого шаблона с отображаемыми ошибками. Чего вы ожидаете?

Daniel Roseman 09.03.2019 13:13

@DanielRoseman Большое спасибо. Заменено «возврат HttpResponse («Форма недействительна»)» на «возврат рендеринга (запрос, 'signin.html', {'форма': форма})», что решило проблему.

user3941871 09.03.2019 13:34
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
7
408
2

Ответы 2

    # Validation
    def clean(self):
        cleaned_data = super(UserLoginForm, self).clean()
        username = cleaned_data.get("username")
        email = cleaned_data.get("email")
        email_exist = User.objects.filter(email=email).exists()
        username_exist = User.objects.filter(username=username).exists()

        if username_exist:
            raise forms.ValidationError('User Exists')
        else:
            raise forms.ValidationError('User does not exists')

        return super(UserProfileForm, self).clean()

Вы можете попробовать это?

По-прежнему не выбрасываются формы. ValidationError.

user3941871 09.03.2019 12:41

Как предложил @Daniel Roseman, «return HttpResponse («Форма недействительна»)» заменен на «return render (request, 'signin.html', {'form': form})», что решило проблему.

Другие вопросы по теме