将html按钮与python脚本链接

时间:2017-01-15 12:03:04

标签: python html flask jinja2

我有两个代码。一个HTML代码和其他python脚本。我想链接提交按钮以链接我的代码以将邮件发送给收件人。我搜索了大多数网站,但是我无法发送我在框中输入的消息。

HTML:

<form method="POST">
    <div>
        <label for="Msg">Type your Message</label>
        <input type="text" name="Msg" />
    </div>
</form>

<div>
    <button type="submit"> Send Mail</button>
</div>

Python脚本:

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

app = Flask(__name__)

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

mail = Mail(app)

@app.route("/")
def create():
    if request.method == 'GET':
        return render_template('index.html')

@app.route("/index.html")
def index():
    if request.method == 'POST':
        message1 = request.form['title'];

    print ('message1')
    msg = Message('Hello', sender = 'Id@gmail.com', recipients = ['Id@gmail.com'])
    msg.body = message1
    mail.send(msg)
    return render_template("index.html")

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

3 个答案:

答案 0 :(得分:0)

我建议您在定义表单标记时使用action。像这样:

<form action="/submit" method="post">
<div>
    <label for="Msg">Type your Message</label>
    <input type="text" name="Msg" />
</div>
<div>
    <button type="submit"> Send Mail</button>
</div>

在路径装饰器中指定提交操作名称,检查邮件是否即将发送并发送电子邮件:

@app.route("/submit", methods=["GET", "POST"])
def index():
    message1 = ''
    if request.method == 'POST':
        message1 = request.form['Msg']
    if message1:
        print(message1)
        msg = Message('Hello', sender = 'Id@gmail.com', recipients = ['Id@gmail.com'])
        msg.body = message1
        mail.send(msg)
    return render_template("index.html")

在处理表单时,不要忘记在生产中使用csrf令牌。

答案 1 :(得分:0)

很抱歉没有明确答案,我不知道您的输出错误,但您应该将POST方法添加到索引路径并在您的html表单中添加操作属性:

@app.route("/index", methods=['GET','POST'])
def index():
    if request.method == 'POST':
        message1 = request.form['title'];

    print ('message1')
    msg = Message('Hello', sender = 'Id@gmail.com', recipients = ['Id@gmail.com'])
    msg.body = message1
    mail.send(msg)
    return render_template("index.html")

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

并将其添加到html表单中:

<form action="/index" method="POST">
    <div>
        <label for="Msg">Type your Message</label>
        <input type="text" name="Msg" />
    </div>
</form>

<div>
    <button type="submit"> Send Mail</button>
</div>

答案 2 :(得分:0)

我认为你的代码有2个问题。我会尽力清楚地描述它。这不仅仅是关于你的代码,还有烧瓶和网站上的一些习惯。

1个索引路径和/

永远不要像使用2个分开的路线渲染相同的模板。你应该这样做:

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

2以

的形式设置操作

就像上面的答案一样。     

PS

实际上,在页面中呈现页面或在submit button中发送电子邮件之间没有区别,因为它们都将数据发布到服务器并让服务器执行(返回页面或发送一个页面)邮件)