![](/img/trans.png)
[英]Show a confirmation/dialog and send POST request within that dialog box only if the user select specific radio button
[英]How to add confirmation dialog for POST request with Flask?
第一次使用Flask。 我正在嘗試為表單添加確認對話框,但僅在某些條件下才可以。 因此,我無法在客戶端執行此操作。 我能夠為GET請求添加它,但無法為POST請求添加它,因為我需要傳遞表單數據。 這是我所做的。
這是主表單的表單提交。 在“取消”上,它只是通過獲取配置請求來刷新當前頁面上的數據。 但是在Apply上,它向/ confirm路由發出POST請求
main.html
<form class="module-form pure-form pure-form-aligned" autocomplete="off" id="uguu">
<fieldset>
<div id="export-settings" class="module-block insight-border">
<div class="pure-control-group">
{{ form.export_server.label }}
{{ form_input(form.export_server, maxlength=255) }}
</div>
<div class="pure-control-group">
{{ form.export_port.label }}
{{ form_input(form.export_port) }}
</div>
<div class="submit-button-group">
<button class="pure-button pure-button-primary" type="submit"
formaction="confirm" formmethod="post">Apply</button>
<button class="pure-button pure-button-primary cancel" type="submit"
formaction="config" formmethod="get">Cancel</button>
</div>
</div>
</fieldset>
</form>
這是燒瓶服務器中的代碼段
@config_page.route("/config", methods=["GET", "POST"])
def config():
if request.method == "POST":
return post_config() #Uses request.form
return get_config()
@config_page.route("/confirm", methods=["POST"])
def confirm():
with ClassA() as class_a:
class_a.load()
#Need to show the confirmation only on this condition
if class_a.is_val_x and request.form['is_val_x'] == 'on':
#Is this the right way to go about it?
return render_template('confirm.html', form=request.form )
return redirect(url_for('.config',form=request.form),code=307)
最后是Confirm.html中的代碼段。 get請求工作正常,但是我不確定如何將燒瓶中的表單數據/確認路由發布到/ config。 我什至不確定這是否是正確的方法。 真的會有任何幫助嗎? 也歡迎使用jQuery或javaScript中的任何解決方案。
<div> Are you sure kind of dialog? </div>
<form>
<button class="pure-button pure-button-primary deny" type="submit"
formaction="config" formmethod="get">Cancel</button>
<button class="pure-button button-warning confirm" type="submit"
formaction="config" formmethod="post">Confirm</button>
</form>
正如您所說的,get請求工作正常。 因此,您必須看到模板confirm.html。 編輯表單標簽。
<form method="POST" action="./config">
<button class="pure-button pure-button-primary deny" type="submit"
formaction="config" formmethod="get">Cancel</button>
<button class="pure-button button-warning confirm" type="submit"
formaction="config" formmethod="post">Confirm</button>
</form>
現在,一旦在代碼段上單擊“確認”,就可以通過打印請求數據來調試表單字段。
@config_page.route("/config", methods=["GET", "POST"])
def config():
if request.method == "POST":
print(request)
return post_config() #Uses request.form
return get_config()
如果要使用ajax / jquery提交表單,可以執行此操作。
<script type="text/javascript">
$('.confirm').click(function (e) {
e.preventDefault();
$.ajax({
url: "./config",
type: 'post',
dataType: "json",
data: {
search: request.term, request: 1
},
success: function (data) {
response(data);
}
});
}
</script>
按照燒瓶的方式,您應該有單獨的forms.py文件,您可以在其中構建所有表單並使用jinja2模板。
我將如何做這些事情是通過創建以下內容:
1. app / forms.py
from flask_wtf import FlaskForm
from wtforms import StringField, BooleanField, SubmitField
from wtforms.validators import DataRequired
class ConfigForm:
conf1 = StringField('Config 1', validators=[DataRequired()])
conf2 = StringField('Config 2', validators=[DataRequired()])
confirm = BooleanField('Cnfirm')
submit = SubmitField('Submit')
2. app / templates / config.py
<html>
<body>
<h1>Config</h1>
<p>
{{ form.conf1.label }}<br>
{{ form.conf1(size=(42) }}
{% for error in form.conf1.errors %}
<span style="color: red;">[{{ error }}]</span>
{% endfor %}
</p>
<p>
{{ form.conf2.label }}<br>
{{ form.conf2(size=(42) }}
{% for error in form.conf2.errors %}
<span style="color: red;">[{{ error }}]</span>
{% endfor %}
</p>
<p>{{ form.submit() }}</p>
</body>
</html>
3. app / routes.py
from flask import Flask render_template, redirect, url_for, request
from forms import ConfigForm
app = Flask(__name__)
@app.route('/config/<confirm>', methods=['GET', 'POST'])
def config(confirm):
form = ConfigForm()
if form.validate_on_submit():
if form.validate_on_submit():
db.get.value1.for.form = form.conf1.data
db.get.value2.for.form = form.conf2.data
if confirm:
db.get.value3.form = form.confim.data
db.session.commit()
flash('You\'r changes have been saved!')
return redirect(url_for('config'))
elif request.method == 'GET':
form.conf1.data = db.get.value1.for.form
form.conf2.data = db.get.value2.for.form
return render_template('config.html', form=form)
@app.route('/')
def index():
confirm = True
return redirect(url_for('config', confirm))
我在這里所做的是,我正在創建配置頁,該頁上是從數據庫加載數據的,如果用戶希望使用post方法更新數據,我將把數據更新到數據庫。
在我的示例中,如果用戶進入/ index頁,它將重定向到cinfig頁並傳遞confim = True,它將與post方法一起更新,而無需任何用戶操作。
我希望這個示例至少能使您走上所需解決方案的道路。 :)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.