сообщения об ошибках не отображаются в форме django. и как решить эту ошибку значения?

#django #django-forms #django-templates

#django #django-forms #django-шаблоны

Вопрос:

сообщения об ошибках не работают в шаблонах Django.

после добавления кода ошибки в html-шаблон в веб-приложении не отображается сообщение об ошибке, когда поля пусты и нажимается кнопка отправки. ошибка html5 — «novalidate» в шаблоне.

Ошибка значения при / регистрации/ Просмотр blog.views.user_signup не вернул объект HttpResponse. Вместо этого он вернул None.

forms.py

 from django import forms 
from django.contrib.auth.forms import UserCreationForm, AuthenticationForm, UsernameField
from django.contrib.auth.models import User
from django.utils.translation import gettext,gettext_lazy as _

class SignUpForm(UserCreationForm):
    
    password1 = forms.CharField(label='Password',widget=forms.PasswordInput(attrs={'class':'form-control'}))
    password2 = forms.CharField(label='Confirm Password(again)',widget=forms.PasswordInput(attrs={'class':'form-control'}))
    
    class Meta:
        
        model = User
        
        fields = ['username','first_name','last_name','email']
        
        labels = {'username':'Username','first_name':'First Name','last_name':'Last Name','email':'Email'}
        
        widgets = {'username':forms.TextInput(attrs={'class':'form-control'}),
                   'first_name':forms.TextInput(attrs={'class':'form-control'}),
                   'last_name':forms.TextInput(attrs={'class':'form-control'}),
                   'email':forms.EmailInput(attrs={'class':'form-control'}),}
        
class LoginForm(AuthenticationForm):
    
    username = UsernameField(widget=forms.TextInput(attrs={'autofocus':True, 'class':'form-control'}))
    
    password = forms.CharField(label=_('password'),strip=False, widget=forms.PasswordInput(attrs={'autocomplete':'current-password','class':'form-control'}))
  

signup.html

 {% extends 'blog/base.html' %}
{% load static %}

{% block content %}

<div class="col-sm-10">
    <h3 class="text-white my-5">Signup Page</h3>
    <form action="" class="post" novalidate>
        {% csrf_token %}
        
        {% for fm in form %}
        <div class="form-group">
        {{fm.label_tag}} {{fm}} {{fm.errors | striptags}}
        </div>
        {% endfor %}
        
        <input type="submit" value='Submit' class='btn btn-primary'>
        
        {% if form.non_field_errors %}
            {% for error in form.non_field_errors %}
            <p> {{error}} </p>
            {% endfor %}
        {% endif %}
    
    </form>
</div>

{% endblock content %}
  

views.py

 from django.shortcuts import render,HttpResponseRedirect
from django.contrib import messages
# Create your views here.

# home
def home(request):
    return render(request, 'blog/home.html')

# about
def about(request):
    return render(request, 'blog/about.html')

# contact
def contact(request):
    return render(request, 'blog/contact.html')

# Dashboard
def dashboard(request):
    return render(request, 'blog/dashboard.html')

# Logout
def user_logout(request):
    return HttpResponseRedirect('/')

# Signup
def user_signup(request):
    if request.method == 'POST':
        form = SignUpForm(request.POST)
        if form.is_valid():
            messages.success(request, 'Congratulations You have become an Author.')
            form.save()
        else:
            form = SignUpForm()
        return render(request, 'blog/signup.html',{'form':form})

# Login
def user_login(request):
    form = LoginForm()
return render(request, 'blog/login.html', {'form':form})
  

Комментарии:

1. Можете ли вы поместить код вашего view.py файла?

2. я добавил views.py но теперь появилась еще одна новая ошибка

Ответ №1:

Вам нужно обработать запросы GET и POST :

 def user_signup(request):
    if request.method == 'POST':
        form = SignUpForm(request.POST)
        if form.is_valid():
            messages.success(request, 'Congratulations You have become an Author.')
            form.save()
    else:
        form = SignUpForm()
    return render(request, 'blog/signup.html',{'form':form})
  

Пожалуйста, убедитесь, что в вашем html используется метод POST :

 
<form action="" method="POST" class="post" novalidate>
...
</form>
  

Комментарии:

1. как выполнить обработку GET и POST? верен ли мой код? почему отображается эта ошибка и почему сообщения об ошибках не работают?

2. В HTML вам может потребоваться включить тег method="POST" in <form> также.