4

我想在提交到烧瓶中的操作 url 之前保存表单数据

<form action="" method="POST">
    <input type="hidden" name="PAYEE_ACCOUNT" value="U1234567">
    <input type="hidden" name="PAYEE_NAME" value="Name">
    <input type="text"   name="PAYMENT_AMOUNT">
    <input type="submit" name="PAYMENT_METHOD" />
</form>

我可以提交此表单,但我想在提交前保存表单数据

看法:

@mod.route('/payment/', methods=['GET', 'POST'])
def payment():
    if request.method != "POST":
        return render_template('form.html')

    form = request.form

    form_data = {'PAYEE_ACCOUNT': form['PAYEE_ACCOUNT'],
                 'PAYEE_NAME': form['PAYEE_Name'],
                 'PAYMENT_AMOUNT' : form['PAYMENT_AMOUNT']
                 }

    # Save Data

    import urllib
    params = urllib.urlencode(form_data)

    url = 'http://www.example.com'
    return redirect(url, params)

请帮我

4

3 回答 3

10

发送 307 状态代码而不是 302 应该告诉浏览器保留使用的 HTTP 方法,从而具有您期望的行为。您对重定向的调用将如下所示:

@mod.route('/payment/', methods=['GET', 'POST'])
def payment():
    if request.method != "POST":
        return render_template('form.html')

    form = request.form

    form_data = {'PAYEE_ACCOUNT': form['PAYEE_ACCOUNT'],
                 'PAYEE_NAME': form['PAYEE_Name'],
                 'PAYMENT_AMOUNT' : form['PAYMENT_AMOUNT']
                 }

    # Save Data

    url = 'http://www.example.com'
    return redirect(url, code=307)
于 2014-11-16T14:40:55.343 回答
0

您需要使用 flask.redirect

flask.redirect(位置,代码=302)

返回一个响应对象(一个 WSGI 应用程序),如果被调用,它会将客户端重定向到目标位置。支持的代码是 301、302、303、305 和 307。不支持 300 是因为它不是真正的重定向,而 304 是因为它是带有定义的 If-Modified-Since 标头的请求的答案。

参数:
location - 响应应重定向到的位置。code - 重定向状态代码。默认为 302。

示例代码:

import os
from flask import Flask,redirect

app = Flask(__name__)

@app.route('/')
def hello():
    return redirect("http://www.example.com", code=302)

if __name__ == '__main__':
    # Bind to PORT if defined, otherwise default to 5000.
    port = int(os.environ.get('PORT', 5000))
    app.run(host='0.0.0.0', port=port)

请参阅烧瓶文档的文档

于 2014-11-13T09:34:37.363 回答
-1

我已经通过使用 JavaScript 解决了这个问题。

首先,将数据发送到服务器。

JavaScript 代码:

<script type="text/javascript">
  var $SCRIPT_ROOT = {{ request.script_root|tojson|safe }};

  $(function() {
    $('#PAYMENT_METHOD').bind('click', function() {
      $.getJSON($SCRIPT_ROOT +'/credit/save_transaction', {
        PAYMENT_ID: $('input[name="PAYMENT_ID"]').val(),
        PAYMENT_AMOUNT: $('input[name="PAYMENT_AMOUNT"]').val(),
        SUGGESTED_MEMO: $('input[name="SUGGESTED_MEMO"]').val()
      }, function(data) {
         if (data.result == 'ok') {
            $('#form_payment').submit();
         }
      });
      return false;
    });
  });
</script>

然后,保存数据并返回结果。

查看代码:

@mod.route('/save_transaction', methods=['GET', 'POST'])
def save_transaction():
    follow_num = request.args.get('PAYMENT_ID')
    amount = request.args.get('PAYMENT_AMOUNT')
    memo = request.args.get('SUGGESTED_MEMO')

    #Save Data

    return jsonify(result='ok')
于 2014-11-21T07:45:49.220 回答