2015-10-27 7 views
0

В настоящее время я пытаюсь создать контактную страницу, используя флягу, флягу и флягу WTF. Сообщение отправляется, но я получаю только «From: None None Random string». Не могли бы вы сказать мне, что я делаю неправильно?Flask-Mail: пустое сообщение

server.py: 

from flask import Flask, render_template, request 
from forms import ContactForm 
from flask_mail import Mail, Message 

mail = Mail() 

app = Flask(__name__) 
app.secret_key = 'developerKey' 

app.config["MAIL_SERVER"] = "smtp.gmail.com" 
app.config["MAIL_PORT"] = 465 
app.config["MAIL_USE_SSL"] = True 
app.config["MAIL_USERNAME"] = '****@gmail.com' 
app.config["MAIL_PASSWORD"] = '****' 

mail.init_app(app) 

@app.route('/', methods=['GET', 'POST']) 
def view(): 
    return render_template('index.html') 

@app.route('/contact', methods=['GET', 'POST']) 
def contact(): 
    form = ContactForm() 

    if request.method == 'POST': 
     msg = Message("Portfolio", sender='[email protected]', recipients=['****@gmail.com']) 
     msg.body = """From: %s <%s> %s %s""" % (form.name.data, form.email.data, form.message.data, "Random string") 
     mail.send(msg) 
     return 'Form posted.' 

    elif request.method == 'GET': 
    return render_template('contact.html', form=form) 


app.debug = True 

if __name__ == '__main__': 
    app.run() 

forms.py 

from wtforms import Form, TextField, TextAreaField,SubmitField,validators 

class ContactForm(Form): 
    name = TextField("Name", [validators.Required()]) 
    email = TextField("Email", [validators.Required()]) 
    message = TextAreaField("Message", [validators.Required()]) 
    submit = SubmitField("Send", [validators.Required()]) 

contact.html 
<body> 
    <h1>Contact Form:</h1> 

    <form action="/contact" method="post"> 
      {{ form.hidden_tag }} 
     <p> 
      {{ form.name.label }} 
      {{ form.name }} 
     </p> 
     <p> 
      {{ form.email.label }} 
      {{ form.email }} 
     </p> 
     <p> 
      {{ form.message.label }} 
      {{ form.message }} 
     </p> 
     <p> 
      {{ form.submit }} 
     </p> 
     </form> 
</body> 

P.S. {{from.hidden.tag}} работает только без скобки

ответ

1

Сообщение не пустое, значения формы. Они пусты, потому что форма не проверяется (и вы даже не проверяете ее достоверность). Это неверно, потому что вы не передаете данные request.form в форму. Это не происходит автоматически, и hidden_tag недоступен, поскольку вы унаследовали от wtforms.Form, а не flask_wtf.Form.

from flask_wtf import Form 

class ContactForm(Form): 
    ... 

@app.route('/contact', methods=['GET', 'POST']) 
def contact(): 
    form = ContactForm() 

    if form.validate_on_submit(): 
     # send a message and return something 

    return render_template('contact.html', form=form) 

Обязательно позвоните form.hidden_tag() в шаблоне, так как форма колбовой WTF не будет проверять без скрытого поля CSRF.

+0

Это сработало;) Можете ли вы просто сказать мне, как POST с jquery ajax? Submit (function() { $ .ajax ({ Тип: 'POST', URL::::::::::: '/ contact', данные: $ (this) .serialize() }); $ ("input: text"). val (''); $ ("textarea"). val (''); return false; }); – Wewow

Смежные вопросы