I am using flask to send emails to user who submits a form in a contact page.
I have tried to test it myself but even If i fill the whole form. Every time I hit submit, I get a validation error saying that I must fill in the form. In my log it says I get a 200, which means the post was a success.
Here is the code:
routes.py
from flask import Flask, render_template, request, flash
from forms import ContactForm
from flask.ext.mail import Message, Mail
mail = Mail()
app = Flask(__name__)
app.secret_key = 'development key'
app.config["MAIL_SERVER"] = "smtp.gmail.com"
app.config["MAIL_PORT"] = 465
app.config["MAIL_USE_SSL"] = True
app.config["MAIL_USERNAME"] = '[email protected]'
app.config["MAIL_PASSWORD"] = '*********'
mail.init_app(app)
app = Flask(__name__)
app.secret_key = 'development key'
@app.route('/contact', methods=['GET', 'POST'])
def contact():
form = ContactForm()
if request.method == 'POST':
if form.validate() == False:
flash('All fields are required.')
return render_template('contact.html', form=form)
else:
msg = Message(form.subject.data, sender="[email protected]")
msg.body = """
From: %s <%s>
%s
""" % (form.name.data, form.email.data, form.message.data)
mail.send(msg)
return 'Form posted.'
elif request.method == 'GET':
return render_template('contact.html', form=form)
Forms.py
from flask.ext.wtf import Form
from wtforms import Form, TextField, TextAreaField, SubmitField, validators, ValidationError
class ContactForm(Form):
name = TextField("Name", [validators.Required("Please Enter Your Name")])
email = TextField("Email",[validators.Required("Please enter your email address"), validators.email("Please enter your email address")])
subject = TextField("Subject", [validators.Required("Please enter a subject.")])
message = TextAreaField("Message", [validators.Required("Please enter a message.")])
submit = SubmitField("Send")
here is an example:
<form action="mailto:[email protected]" method="post" enctype="text/plain">
<tr>
<td>Code name</td>
<td><input type='text' name='codename' placeholder="name your code" size=20 /></td>
</tr>
<tr>
<td>Name</td>
<td><input type='text' name='name' maxlength=20 size=20 /></td>
</tr>
<tr>
<td>Code</td><br/>
<td><textarea name='code' rows=4 cols=50></textarea></td>
</tr>
<tr>
<td></td>
<td><input type='submit' value='Submit Python Code' /></td>
</tr>
</form>
edit this to whatever you need. Keep in mind that you will also have to change your flask code to work with this.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With