将表单添加到html文件后,nginx/flask应用程序抛出500错误

将表单添加到html文件后,nginx/flask应用程序抛出500错误,nginx,flask,config,Nginx,Flask,Config,我正在努力解决nginx的一个问题。Nginx在刷新时抛出500错误 我只是想通过flask在html页面上显示表单 forms.py from flask_wtf import FlaskForm from wtforms import TextField, StringField, SubmitField, validators class EmailForm(FlaskForm): email = TextField("Email") submit = SubmitField("

我正在努力解决nginx的一个问题。Nginx在刷新时抛出
500错误

我只是想通过
flask
html
页面上显示
表单

forms.py

from flask_wtf import FlaskForm
from wtforms import TextField, StringField, SubmitField, validators

class EmailForm(FlaskForm):
  email = TextField("Email")
  submit = SubmitField("Send")
from flask import Flask, render_template, request
from flask_mail import Mail, Message
from forms import EmailForm

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

# add mail server config
app.config['MAIL_SERVER'] = 'xxx'
app.config['MAIL_PORT'] = 465
app.config['MAIL_USE_SSL'] = True
app.config['MAIL_USERNAME'] = 'xx'
app.config['MAIL_PASSWORD'] = 'xx'

mail = Mail(app)
@app.route('/', methods=('GET', 'POST'))
def email():
    form = EmailForm()

    if request.method == 'POST':
        if form.validate() == False:
            return 'Please fill in all fields <p><a href="/contact">Try Again!!!</a></p>'
        else:
            msg = Message("Message from your visitor",
                          sender='xxx',
                          recipients=['xxx'])
            msg.body = """
            From: %s <%s>,
            %s
            """ % (form.email.data)
            mail.send(msg)
            return "Successfully  sent message!"
    elif request.method == 'GET':
        return render_template('index.html', form=form)
if __name__ == '__main__':
    app.run()
routes.py

from flask_wtf import FlaskForm
from wtforms import TextField, StringField, SubmitField, validators

class EmailForm(FlaskForm):
  email = TextField("Email")
  submit = SubmitField("Send")
from flask import Flask, render_template, request
from flask_mail import Mail, Message
from forms import EmailForm

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

# add mail server config
app.config['MAIL_SERVER'] = 'xxx'
app.config['MAIL_PORT'] = 465
app.config['MAIL_USE_SSL'] = True
app.config['MAIL_USERNAME'] = 'xx'
app.config['MAIL_PASSWORD'] = 'xx'

mail = Mail(app)
@app.route('/', methods=('GET', 'POST'))
def email():
    form = EmailForm()

    if request.method == 'POST':
        if form.validate() == False:
            return 'Please fill in all fields <p><a href="/contact">Try Again!!!</a></p>'
        else:
            msg = Message("Message from your visitor",
                          sender='xxx',
                          recipients=['xxx'])
            msg.body = """
            From: %s <%s>,
            %s
            """ % (form.email.data)
            mail.send(msg)
            return "Successfully  sent message!"
    elif request.method == 'GET':
        return render_template('index.html', form=form)
if __name__ == '__main__':
    app.run()
从烧瓶导入烧瓶,呈现模板,请求
从电子邮件导入邮件、消息
从表单导入电子邮件表单
app=烧瓶(名称)
app.secret_key='xx'
#添加邮件服务器配置
app.config['MAIL_SERVER']='xxx'
app.config['MAIL_PORT']=465
app.config['MAIL\u USE\u SSL']=True
app.config['MAIL_USERNAME']='xx'
app.config['MAIL_PASSWORD']='xx'
邮件=邮件(应用程序)
@app.route('/',methods=('GET','POST'))
def email():
form=EmailForm()
如果request.method==“POST”:
如果form.validate()==False:
return“请填写所有字段”
其他:
msg=Message(“来自访问者的消息”,
发件人='xxx',
收件人=['xxx'])
msg.body=“”
发件人:%s,
%
“”“%(form.email.data)
邮件发送(msg)
return“已成功发送消息!”
elif request.method==“GET”:
返回呈现模板('index.html',form=form)
如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu':
app.run()
index.html

        <form action="{{ url_for('email') }}" method="post">
            {{ form.hidden_tag() }}

            {{ form.email }}
            {{ form.submit }}
        </form>

{{form.hidden_tag()}}
{{form.email}
{{form.submit}
我做错了什么?我的站点刚刚抛出一个
500内部服务器
错误


谢谢

这里有几件事不对。首先,您不是在使用
FlaskForm
,而是在使用标准
Form
,它没有附带
csrf\u令牌
,您将使用
hidden\u tag()
。这可能是错误的根源。因此,在forms.py中:

将flask_wtf导入表格中的
替换为flask_wtf导入表格中的
类电子邮件表格(表格):
替换为
类电子邮件表格(表格):

接下来,
validators.Email('your@email.com)
没有任何意义。
Email()
验证程序接受的唯一参数是针对最终用户的错误消息。您应该删除它,或者用类似于
validators.Email('那不是电子邮件!')的东西替换它。

编辑

正如大卫主义者所指出的,形式导入很好,只是去润滑而已。如果您从wtforms导入表单中执行了
,则这是错误的。真正的问题似乎在这里:

msg = Message("Message from your visitor" + form.name.data,
                      sender='xxx',
                      recipients=['xxx'])
msg.body = """
From: %s <%s>,
%s
""" % (form.name.data, form.email.data, form.message.data)
mail.send(msg)
msg=Message(“来自访问者的消息”+form.name.data,
发件人='xxx',
收件人=['xxx'])
msg.body=“”
发件人:%s,
%
“”“%(form.name.data、form.email.data、form.message.data)
邮件发送(msg)

您不断引用不存在的
form.name.data
form.message.data
。您的
电子邮件表单
中没有定义
名称
消息
字段。如果您不需要名称或消息字段,则应删除它们;如果您忘记了,则应将它们添加到
电子邮件表单
类。

我将其添加到
routes.py
app.py
中,但它没有显示任何内容。我在哪里可以看到结果这显示了/var/log/nginx/error.log中的一个错误:2016/12/12 16:37:24[error]983#0:*3 connect()在连接到上游时失败(111:连接被拒绝),客户端:xx.xxx.xxx.xxx,服务器:site.com,请求:“GET/HTTP/1.1”,上游:,主机:“site.com”@Jshee我的第一个问题是,您是否在表单类中添加了名称和消息字段?类似于以下内容:
name=StringField('name',[validators.DataRequired()])
message=StringField('message',[validators.DataRequired()])
。第二,您是否设置了正确的信息以连接到邮件服务器?是的。请参阅更新。我删除了任何
名称
消息
,只需要
电子邮件
@Jshee。您仍然需要从以下位置删除
中的两个额外的字符串格式位:%s,%s
。它应该看起来像来自:%s的