2014-11-13 5 views
2

Я хочу, чтобы сохранить данные формы, прежде чем представить URL действия в колбеКак перенаправить внешний URL с параметрами и методом POST?

<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) 

Пожалуйста, помогите me

+1

Где вы хотите сохранить данные? На компьютере пользователя? –

+0

нет, я сохранил данные на сервере, только я хочу перенаправить на url с параметром –

ответ

0

Я решил эту проблему с помощью JavaScript

Первого, Sendeding Данные, предназначенных для сервера кода Java Script:

<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') 
0

Вам необходимо использовать флягу.redirect

flask.redirect (местоположение, код = 302)

возвращает объект ответа (а WSGI приложение), что, при вызове, перенаправляет клиента к целевому местоположению. Поддерживаемые коды: 301, 302, 303, 305 и 307. 300 не поддерживается, потому что это не реальный redirect и 304, потому что это ответ на запрос с запросом с определенными заголовками If-Modified-Since.

Параметры:
местоположение - место, на которое должен быть перенаправлен ответ. Код - код статуса перенаправления. по умолчанию 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) 

см the documentation on flask docs.

+0

как передать параметр и метод для перенаправления метода? –

7

Отправка кода статуса 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) 
Смежные вопросы