Я создаю форму, в которой пользователь вводит кучу адресов электронной почты. Что я хочу сделать, так это проверить электронные письма построчно в TextField.
Итак, что мне нужно сделать, это прочитать ввод построчно и применить валидатор электронной почты для каждой строки.
Как я мог это сделать?
мой текущий код (хотя это просто обычная форма электронной почты ..)
forms.py
class InputEmailsForm(forms.Form):
email = forms.EmailField()
def __init__(self, *args, **kargs):
super().__init__(*args, **kwargs)
# override label and error messages here
...
Пользователь @Sam должен вводить адрес электронной почты построчно в одном текстовом поле.
Каков ожидаемый формат этого ввода? Например, будет ли пользователь разделять электронные письма запятыми? Точки с запятой? Пробелы? Персонаж "новой строки"?
@Sam символ "новой строки", например [email protected]/[email protected]...
Понятно. Можете ли вы поделиться источником вашего form.py?
@Sam Конечно, но мой текущий код - это просто EmailField. Сначала мне нужно найти способ читать ввод построчно.
Все, что у вас есть, пожалуйста, поделитесь этим!





Преобразуйте свой EmailField (который будет принимать только один адрес) в TextField, затем напишите пользовательскую функцию проверки, которая использует встроенную функцию Django validate_email, чтобы убедиться, что каждая строка содержит действительный адрес электронной почты:
from django.core.validators import validate_email
from django.core.exceptions import ValidationError
from django import forms
class InputEmailsForm(forms.Form):
emails = forms.TextField()
def clean_emails(self):
data = self.cleaned_data['emails']
for line in data.splitlines():
try validate_email(line):
pass
except ValidationError:
raise forms.ValidationError("The following is not a valid e-mail: {0}".format(line))
return data
Большое спасибо. Я не знал splitlines. Я попробую это.
Мне непонятно, о чем вы спрашиваете. Вы спрашиваете, как анализировать пользовательский ввод, содержащий несколько адресов электронной почты? Если да, то какой формат вы ожидаете для этого ввода? Или вы спрашиваете, как включить в форму несколько текстовых полей?