如何使POST方法适用于带烧瓶的同一页面上的两种不同形式?

时间:2017-06-15 06:17:15

标签: python flask

如何使POST方法适用于带烧瓶的同一页面上的两种不同形式?

这是来自flask / python

的主__int__.py文件的代码
@app.route('/', methods=['GET', 'POST'])
@app.route('/login/', methods=['GET', 'POST'])
def login():
    error = None
    if request.method == 'POST':
        if request.form['email'] != '1' or \
                request.form['password'] != '1':
            flash('Invalid Credentials')
        else:
            flash('You were successfully logged in')
            return redirect(url_for('dashborad'))
    return render_template('login.html', error=error)


@app.route('/', methods=['GET', 'POST'])
@app.route('/register/', methods=['GET', 'POST'])
def register():
    try:
        if request.method == 'POST':
            email = request.form['email1']
            name = request.form['name1']
            password = request.form['password1']

            cur, db = connection()
            x = cur.execute(" SELECT * FROM users WHERE email = (%s)" ,[escape(email)])

            if int(x) > 0:
                flash ("email already used ")
                return render_template ("register.html")
            else:
                cur.execute("INSERT INTO users (first_name, email, password) VALUES (%s, %s, %s);" ,(escape(name), escape(email), escape(password) ))

                db.commit()
        return render_template ("register.html")

现在python正在为第一个@ app.route登录表单读取POST方法

有没有简单的方法在python中获得这样的行?

if request.method == 'POST' for form 1

 if request.method == 'POST' for form 2

2 个答案:

答案 0 :(得分:1)

我想你想要LinkedIn

的起始页面

要在Flask中实现这一点,请将HTML模板创建为:



<input type="submit" name="btn" value="Save">
<input type="submit" name="btn" value="Cancel">
&#13;
&#13;
&#13;

然后您可以通过以下方式验证:

if request.form["btn"]=="Save":
    if request.method== 'POST':
        doSomething()

此解决方案可能有效

答案 1 :(得分:1)

我想出了使用JavaScript在同一页面上为每种表单使用Ajax请求的方法

  

示例:-

HTML表单

<form onsubmit="formSumbit()">
  email: <input id="email" type="text">
  password: <input id="password" type="password">
  <input type="submit">
</form>

每种形式的JavaScript POST请求函数都会看起来像这样

function formSumbit(event) {
    event.preventDefault()
    fetch("http://yourwebsite.com/login", {
        method: "POST",
        headers: { 'Accept': 'application/json', 'Content-Type': 'application/json' },
        body: JSON.stringify({ email: document.getElementById('email').value, password: document.getElementById('password').value })
    }).then((res) => {
        console.log(res);
        return res.json();
    }).then((data) => {
        console.log(data);
    }).catch((err) => {
        console.log(err);
    });
}

并为Flask中的每种表单使用两个POST路由处理程序,或传递名为'form1''form2'的额外参数,并在Flask路由处理程序中检查参数。