如何为带有Flask的POST请求添加确认对话框?

2024-06-17 11:03:05 发布

您现在位置:Python中文网/ 问答频道 /正文

第一次用烧瓶。我正在尝试为窗体添加确认对话框,但仅限于某些条件。所以我不能在客户端执行此操作。我可以为GET请求添加它,但不能为POST请求添加它,因为我需要传递表单数据。这是我所做的。在

这是主表单的表单提交。在Cancel中,它只是通过执行getrequestforconfig来刷新当前页面上的数据。但在Apply时,它发出POST请求/确认路由

在主.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>

这是flask服务器中的代码段

^{pr2}$

一个最后的代码段确认.html. get请求可以正常工作,但是我不知道如何将表单数据从flask/confirm路由发布到/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>

Tags: 数据divformconfig表单puretypegroup
2条回答

正如您所说的,get请求可以正常工作。所以你一定看到了模板确认.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>

现在,一旦在代码段上单击confirm,就可以通过打印请求数据调试表单字段了。在

^{pr2}$

如果您想使用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>

好吧,在烧瓶的方式,你应该有单独的表单.py创建所有表单并使用jinja2模板的文件。在

我要做的就是创造这些东西:

1。应用程序/表单.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>强烈。应用程序/模板/配置.py

^{pr2}$

3。应用程序/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方法一起更新,而无需任何用户操作。在

我希望这个例子至少能让你找到你需要的解决方案。:)

相关问题 更多 >