Django form.py и Join.html не отображают ошибки формы ⇐ Python

Программы на Python
Anonymous
Django form.py и Join.html не отображают ошибки формы

Сообщение Anonymous »

Я видел много руководств по этому вопросу (я новичок в Django), и единственная проблема, которую я смог найти, это поднять форму. Validation("...") не отображалась в моем шаблоне HTML и не отображалась не останавливать отправку формы.
Я пробовал много вариантов, включая искусственный интеллект, но все равно сталкивался с теми же проблемами. Если я допустил глупую ошибку, укажите на нее, чтобы я знал, что в следующий раз этот код — всего лишь мой проект, чтобы я мог научиться программировать Django.
HTML:

{% csrf_token %}

{% if form.non_field_errors %}
{{ form.non_field_errors }}
{% endif %}

{% if form.errors %}
{{ form.errors }}
{% endif %}

{{ form.username.label }}
{{ form.username }}
{% for error in form.username.errors %}
{{ error }}
{% endfor %}


{{ form.email.label }}
{{ form.email }}
{% for error in form.email.errors %}
{{ error }}
{% endfor %}


{{ form.password.label }}
{{ form.password }}
{% for error in form.password.errors %}
{{ error }}
{% endfor %}


{{ form.repassword.label }}
{{ form.repassword }}
{% for error in form.repassword.errors %}
{{ error }}
{% endfor %}



arrow_circle_right




Forms.py:

from django import forms
from django.contrib.auth.models import User

class JoinForm(forms.Form):
username = forms.CharField(
validators=['clean_username'],
widget=forms.TextInput(attrs={
'id': "usernameId",
'name': "username",
'type': "text",
'placeholder': "username",
'autocomplete': "username",
'maxlength': 64,
'required': True,
}),
label='Username'
)
email = forms.EmailField(
validators=['clean_email'],
widget=forms.EmailInput(attrs={
'id': "emailId",
'name': "email",
'type': "text",
'placeholder': "email" ,
'autocomplete': "email",
'maxlength': 256,
'required': True,
}),
label='Email'
)
password = forms.CharField(
validators=['clean_password'],
widget=forms.PasswordInput(attrs={
'id': "passwordId",
'name': "password",
'type': "password",
'placeholder': "password",
'autocomplete': "new-password",
'maxlength': 127,
'required': True,
}),
label='Password'
)
repassword = forms.CharField(
validators=['clean_repassword'],
widget=forms.PasswordInput(attrs={
'id': "repasswordId",
'name': "repassword",
'type': "password",
'placeholder': "re-confirm password",
'maxlength': 127,
'required': True,
}),
label='Password'
)

def clean_username(self):
print("Cleaning username")
username = self.cleaned_data.get('username')
if username and User.objects.filter(username=username).exists():
raise forms.ValidationError("Username already exists.")
return username

def clean_email(self):
print("Cleaning email")
email = self.cleaned_data.get('email')
if email and '@example.com' in email:
raise forms.ValidationError("Email from example.com is not allowed.")
elif email and User.objects.filter(email=email).exists():
raise forms.ValidationError("Email already exists.")
return email

def clean_password(self):
print("Cleaning password")
password = self.cleaned_data.get('password')
if password and len(password) < 8:
raise forms.ValidationError("Password must be at least 8 characters")
return password

def clean_repassword(self):
print("Cleaning repassword")
repassword = self.cleaned_data.get('repassword')
password = self.cleaned_data.get('password')
if repassword != password:
raise forms.ValidationError("Passwords do not match")
return repassword


views.py:

from django.shortcuts import render, redirect
from .forms import JoinForm
from django.contrib.auth import login, logout
from django.http import HttpResponse, HttpRequest, HttpResponseRedirect, JsonResponse
from django.contrib.auth.models import User
from django.contrib.auth.views import LogoutView, LoginView
from django.urls import reverse_lazy
import json

def index(request):
return render(request, 'Index.html')

def create_user(request):
# if User.objects.exists():
# return redirect('index')
if request.method == 'POST':
form = JoinForm(request.POST)
if form.is_valid():
# Extract cleaned data
username = form.cleaned_data['username']
password = form.cleaned_data['password']
email = form.cleaned_data['email']

# Create the user
user = User.objects.create_user(username=username, password=password, email=email)
user.save()

# Log the user in
login(request, user)

# Redirect to success page
return redirect('send_call')
else:
return redirect('create_user')
else:
form = JoinForm()

# For GET requests, render the Join.html page
return render(request, 'Join.html', {'form': form})


Подробнее здесь: https://stackoverflow.com/questions/790 ... orm-errors

Вернуться в «Python»