Django - поля электронной почты, не перечисленные после вызова .super (). Clean () - PullRequest
1 голос
/ 03 апреля 2020

Я новичок в Django и приношу свои извинения, если это базовый c вопрос (или ошибка), но у меня возникают проблемы с проверкой формата электронной почты, когда электронное письмо набирается как: test@com.

Я создал форм.py и views.py ниже для теста:

form.py

from django import forms
from django.core import validators

class userForm(forms.Form):
    fname = forms.CharField(label="First name")
    lname = forms.CharField(label="Last name")
    email = forms.EmailField(label="Email")
    vemail = forms.EmailField(label="Email validation")


    def clean(self):
        all_clean_data = super().clean()
        fname = all_clean_data['fname'].lower().capitalize()
        lname = all_clean_data['lname'].lower().capitalize()
        email = all_clean_data['email'].lower()
        vmail = all_clean_data['vemail'].lower()
        if email != vmail:
            raise forms.ValidationError("Email address doesn't match, please try again")

views.py

def users(request):
    form = forms.userForm()
    if request.method == 'POST':
        form = forms.userForm(request.POST)
        if form.is_valid():
            print('Validation ok')
    return render(request,"test_app/users.html",{'formName':form})

Кажется, что все работает нормально ... но ... если в форме (веб-странице) я наберу адрес электронной почты, например: test@com и отправьте форму, произойдет 2 вещи:

  1. Я не получаю оповещение типа "Неверный формат электронной почты" на форме (веб-странице)
  2. Ключ электронной почты "ключ" on all_clean_data ['email'] не существует.

Если я введу действительное письмо, например: test@test.com, оно будет работать. Если я ввожу недопустимый адрес электронной почты, например: abcde, то получаю сообщение с предупреждением.

Проблема заключается в том, что я набираю такие вещи, как: test@com ... тогда я не получаю любое сообщение об ошибке проверки, отправка инициируется, но я также не получаю поле.

Оцените вашу помощь.

Ниже информации отладки

KeyError at /
'email'
Request Method:     POST
Request URL:    http://127.0.0.1:8000/
Django Version:     3.0.3
Exception Type:     KeyError
Exception Value:    
'email'
Exception Location:     /Users/.../test_app/forms.py in clean, line 20
Python Executable:  /Users/.../bin/python
Python Version:     3.8.2
Python Path:    
['/Users/.../test_project/test_project',
 '/Users/.../opt/anaconda3/envs/myDjangoEnv/lib/python38.zip',
 '/Users/.../opt/anaconda3/envs/myDjangoEnv/lib/python3.8',
 '/Users/.../opt/anaconda3/envs/myDjangoEnv/lib/python3.8/lib-dynload',
 '/Users/.../opt/anaconda3/envs/myDjangoEnv/lib/python3.8/site-packages']

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...