Как получить значения полей формы в форме и отправить почту

Джанго версии 2.2

У меня есть форма, как показано ниже в forms.py

class NameForm(forms.Form):
    email_address = forms.EmailField(label='Your Email Address', max_length=100)

в форме.html

<form  method = "POST">
    {% csrf_token %}
    {{ form }}
    <input type = "submit" value = "Submit">
</form>

просмотры.py

def register(request):
    model = Test
    if request.method == 'POST':  # If the form has been submitted...
        form = NameForm(request.POST)  # A form bound to the POST data
        if form.is_valid():  # All validation rules pass

            email_address = form.cleaned_data['email_address']
            print (email_address)
            if (email_address == Test.email_address):

                return HttpResponseRedirect('../success') # Redirect after POST
            else :
                return HttpResponseRedirect('../failed')
    else:
        form = NameForm()  # An unbound form

    return render(request, 'form.html', {'form': form})

модели.py

class Test(models.Model)
email_address= models.EmailField(max_length=100)

Все соответствующие модули успешно импортированы, и форма отправляется без проблем.

Что мне нужно сделать, так это то, что когда пользователь предоставляет адрес электронной почты с помощью формы, адрес электронной почты должен быть сверен с электронными письмами в базе данных (models.py), которая была предоставлена ​​​​ранее. После проверки адресов электронной почты в базе данных, если указанный адрес электронной почты соответствует идентификатору электронной почты в базе данных, электронная почта должна быть отправлена ​​​​на идентификатор электронной почты. Логика проста, но доступ и использование значений form.field в форме представления класса не увенчались успехом.

Я пробовал приведенный ниже код,

testmail = form.cleaned_data['email_address']
if (testmaill == '[email protected]' ): 
  return HttpResponseRedirect('../success') 

И это не сработало

Пожалуйста, укажите фактическую ошибку, что вы получаете?

Akhilendra 10.04.2019 12:12

@Alasdair я пытался использовать form.cleaned_data, это не сработало, я пробовал testmail = form.cleaned_data['email_address'] if (testmaill == '[email protected]'): return HttpResponseRedirect('../success '), но он не перенаправлялся на /success, когда я использовал тот же идентификатор почты в базе данных, что и форма ввода, @-Akhilendra я не получаю никаких ошибок, я не могу обработать требование... Я попробовал просмотр функции для форма, но я все еще не могу получить доступ к значению form.filed

Joel Deleep 10.04.2019 12:20

я сделал эту печать, она не отображается на отображаемой веб-странице

Joel Deleep 10.04.2019 12:30

спасибо @Alasdair, получил это в консоли, но я не могу проверить адрес электронной почты, который я предоставляю, с электронными письмами в базе данных

Joel Deleep 10.04.2019 15:34

Не могли бы вы проверить код еще раз, я отредактировал и преобразовал его в функцию

Joel Deleep 10.04.2019 15:55
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
5
549
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Вы можете сделать проверку в своей форме. См. дополнительную информацию https://docs.djangoproject.com/en/2.2/ref/forms/validation/.

Пример:

def clean_email_address(self):
        email_address = self.cleaned_data.get('email_address')
        if Test.objects.filter(email_address__iexact=email_address).count() == 0:
            raise forms.ValidationError("Your email address not exist")

        return email_address

И затем, на ваш взгляд, если форма действительна, вы можете получить адрес электронной почты:

 form.cleaned_data.get("email_address")

Вы также можете увидеть, какие данные были предоставлены.

form.data.get("email_address")

Вот ваша отредактированная функция:

def register(request):
    if request.method == 'POST':  # If the form has been submitted...
        form = NameForm(request.POST)  # A form bound to the POST data
        if form.is_valid():  # All validation rules pass

            email_address = form.cleaned_data.get('email_address')
            if Test.objects.filter(email_address__iexact=email_address).count() == 0:

                return HttpResponseRedirect('../success') # Redirect after POST
            else :
                return HttpResponseRedirect('../failed')
    else:
        form = NameForm()  # An unbound form

    return render(request, 'form.html', {'form': form})

Для повторения всех писем из вашей базы данных вы можете использовать. for e in Test.objects.all(): print(e.email_address). docs.djangoproject.com/en/2.2/ref/models/querysets

NKSM 10.04.2019 15:54

я не хочу печатать адрес электронной почты, я хочу проверить его с помощью идентификатора электронной почты, который я предоставляю через формы, могу ли я использовать httpresponseredirect вместо ValidationError

Joel Deleep 10.04.2019 15:58

Да, вы можете сделать это в представлениях. Я отредактировал вашу функцию в своем ответе.

NKSM 10.04.2019 16:14

Это действительно полезно, получил то, что мне нужно

Joel Deleep 10.04.2019 16:17

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