如何获取表单中的表单字段值并发送邮件
How to get form field values in form and send mail
Django 版本 2.2
我在 forms.py
中有如下表格
class NameForm(forms.Form):
email_address = forms.EmailField(label='Your Email Address', max_length=100)
在 form.html
<form method="POST">
{% csrf_token %}
{{ form }}
<input type="submit" value="Submit">
</form>
views.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})
models.py
class Test(models.Model)
email_address= models.EmailField(max_length=100)
所有相应的模块都已成功导入,表单提交也没有任何问题。
我需要做的是,当用户使用表单提供电子邮件地址时,电子邮件地址必须与之前提供的数据库 (models.py) 中的电子邮件进行核对。检查数据库中的电子邮件地址后,如果提供的电子邮件地址与数据库中的电子邮件地址匹配,则必须将电子邮件发送到电子邮件地址。逻辑很简单,但是访问和使用 class 视图表单中的 form.field 值失败了。
我试过下面的代码,
testmail = form.cleaned_data['email_address']
if (testmaill == 'mymail@database.com' ):
return HttpResponseRedirect('../success')
而且没用
您可以在表单中进行验证。查看更多信息 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})
Django 版本 2.2
我在 forms.py
中有如下表格class NameForm(forms.Form):
email_address = forms.EmailField(label='Your Email Address', max_length=100)
在 form.html
<form method="POST">
{% csrf_token %}
{{ form }}
<input type="submit" value="Submit">
</form>
views.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})
models.py
class Test(models.Model)
email_address= models.EmailField(max_length=100)
所有相应的模块都已成功导入,表单提交也没有任何问题。
我需要做的是,当用户使用表单提供电子邮件地址时,电子邮件地址必须与之前提供的数据库 (models.py) 中的电子邮件进行核对。检查数据库中的电子邮件地址后,如果提供的电子邮件地址与数据库中的电子邮件地址匹配,则必须将电子邮件发送到电子邮件地址。逻辑很简单,但是访问和使用 class 视图表单中的 form.field 值失败了。
我试过下面的代码,
testmail = form.cleaned_data['email_address']
if (testmaill == 'mymail@database.com' ):
return HttpResponseRedirect('../success')
而且没用
您可以在表单中进行验证。查看更多信息 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})