Django Form: проверка построчно

Я создаю форму, в которой пользователь вводит кучу адресов электронной почты. Что я хочу сделать, так это проверить электронные письма построчно в 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 21.02.2019 04:40

Пользователь @Sam должен вводить адрес электронной почты построчно в одном текстовом поле.

Ooto 21.02.2019 04:44

Каков ожидаемый формат этого ввода? Например, будет ли пользователь разделять электронные письма запятыми? Точки с запятой? Пробелы? Персонаж "новой строки"?

Sam 21.02.2019 04:45

@Sam символ "новой строки", например [email protected]/[email protected]...

Ooto 21.02.2019 04:46

Понятно. Можете ли вы поделиться источником вашего form.py?

Sam 21.02.2019 04:47

@Sam Конечно, но мой текущий код - это просто EmailField. Сначала мне нужно найти способ читать ввод построчно.

Ooto 21.02.2019 04:48

Все, что у вас есть, пожалуйста, поделитесь этим!

Sam 21.02.2019 04:48
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
7
113
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Преобразуйте свой 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. Я попробую это.

Ooto 21.02.2019 04:58

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