如何使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
答案 0 :(得分:1)
我想你想要LinkedIn
的起始页面要在Flask中实现这一点,请将HTML模板创建为:
<input type="submit" name="btn" value="Save">
<input type="submit" name="btn" value="Cancel">
&#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路由处理程序中检查参数。