亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Flask:request.method =='POST' 跳過返回語句

Flask:request.method =='POST' 跳過返回語句

函數式編程 2021-12-23 16:15:55
我的應用程序有一個奇怪的問題。我正在做的是:我在 JS(客戶端)中生成一個 csv 文件,然后將它發送到燒瓶,然后我使用 python 腳本過濾文件,然后將其返回給客戶端。除了最后一部分,一切都很好。當涉及到返回 render_template 時,它只是跳過那部分。這很奇怪,因為它在if request.method == 'POST' 內部。我在if request.method=='POST' 中打印了值,我可以在服務器端看到這些值。燒瓶路線.py:@app.route('/update_file', methods=['GET', 'POST'])@login_requireddef update_file():    '''Opens the filtered_file page but with updated file'''    clicked = None    if request.method == 'POST':        clicked = io.StringIO(request.form['data'])        file_to_filter = pd.read_csv(clicked, sep=',', engine='python', encoding='utf_8_sig')        table1 = update_csv(file_to_filter)        print(table1)        table2 = table1.to_html(classes='my_class" id = "my_id')        return render_template('3_filtered_file.html', data=table2)這是我在我的 html 模板上顯示它的方式: <div class="table-responsive">    {{data | safe}}</div>我已經對客戶端上傳的文件做了類似的處理,效果很好,但是這個有一個我似乎找不到的錯誤:/編輯: 這是我發送ajax請求的JS://On Update click renders table to csv, activates the be_filter and reopens it in the filtered_file.htmlvar isClicked;jQuery("#update").on('click', function(){    var response = confirm('Are you sure you want to UPDATE rows ?');    if(response == true){                            isClicked = $('#my_id').table2csv();        $.ajax({            type:'POST',            url:"{{url_for('update_file')}}",            data: {'data': isClicked}        });         //window.location.href='/update_file';    }else{        return false;    }});
查看完整描述

1 回答

?
ITMISS

TA貢獻1871條經驗 獲得超8個贊

這里的問題是,您應該在提交表單時使用 AJAX。AJAX 主要是在后臺與服務器通信,但您正試圖將其用作以編程方式提交 POST 表單數據的工具。使用 AJAX 將向服務器發送請求,就像單擊鏈接或提交表單一樣,但瀏覽器不會導航到結果。這就是為什么您得出的結論是flask 跳過了render_template調用,但模板確實得到了渲染。只是通過 AJAX 調用,回復只會在 AJAX 成功回調中結束,而不是在瀏覽器的主窗口中。


對于這樣的 AJAX 請求,不需要發回 HTML。例如,您可以簡單地 return "update successful"。


您可以通過從客戶端手動重定向到結果頁面來修復現有代碼:


// in your $.ajax() options:

success: function(reply) {

  if (reply == "update successful") location = "/table"; // URL of table view

  else alert("server reports error");

}

在 AJAX 調用成功更新服務器上的 CSV 文件后,這將在客戶端上重定向。


但是,您可以簡單地提交實際表單:


<form id="tableDataForm" method="post" action="{{url_for('update_file')}}">

  <input type="hidden" name="data" id="tableData">

</form>

$("#update").on('click', function(){

    $('#tableData').val($('#my_id').table2csv()); // insert data into hidden <input>

    $('#tableDataForm').submit();  // send POST request

});

這就是你所需要的?,F在瀏覽器會再次顯示flask發回的回復。


查看完整回答
反對 回復 2021-12-23
  • 1 回答
  • 0 關注
  • 646 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號