1. 程式人生 > >基於python-flask搭建後臺,HTML+CSS+JS(jQuery)寫前端的web全棧開發(三)——3.2 普通按鈕點選事件與後臺互動

基於python-flask搭建後臺,HTML+CSS+JS(jQuery)寫前端的web全棧開發(三)——3.2 普通按鈕點選事件與後臺互動

    在上一篇文章,我們講解了基於外掛實現的上傳圖片到後臺處理,並將處理後得到的結果圖與原圖在前端顯示。

    主要idea是將圖片先在後臺進行快取,我們傳回兩張圖片的途徑,在filedone函式中對<img/>標籤的src屬性進行更新。

    但是這樣子存在一個問題,就是後臺“static/temp/left(right)”資料夾裡的圖片會越來越多。

    這時候就是那個submit按鈕起作用了!我們先將得到的兩個路徑filepathpilepath_用‘&’合併在一起,暫時儲存在一個不可見的<input type="text"/>標籤中,當submit被點選時,將兩個途徑傳回後臺,後臺函式接收路徑並對對應路徑的檔案做刪除remove。

<!-- demo.html -->
    <body>
    ……
    <input id="temp" type="text" value="Nothing!" style="display: none">
    ……
</body>
// javascript
$('#fileupload').fileupload{
    ...
    done.function(e, data){
        document.getElementById('temp').value = filepath + "&" + filepath_;
    }
    ...
}

    上一次我們已經定義了額外的submit按鈕,現在我們要使用它。

1. 在後臺即sketch.py中新定義函式delete()

@app.route('/delete', methods=['POST','GET'])
def delete():
    # do something
    return render_template('demo.html')

    同樣我們要注意路由的設定,我們假設這一次的互動是在一個隱藏的頁面“http://127.0.0.1:5000/delete/”實現的。

2. 前端“submit”標籤與後端函式繫結

    因為我們使用ajax進行資料傳輸,因此可以這樣子做——

$('#submit').on("click", function () {
    $('#progress .progress-bar').css(
        'width',
        0 + '%'
    );// 這裡實現了當我們點選submit按鈕後讓進度條重新歸0
    var filepath_ = document.getElementById('temp').value;// 獲取剛剛儲存在temp(text)上的數值
                
    // try to delete the original images
    var data = {
        'path': filepath_.split("&")[0],
        'path_': filepath_.split("&")[1]
    }// 對字串做分割,並通過建立字典data進行分裝
    $.ajax({
        type: 'GET',
        url:'{{ url_for("delete") }}',// 這裡就實現了函式與html標籤的繫結!!!
        data: data,                   // 要傳給後臺的資料
        dataType: 'json',             // 資料格式
        success: function(data){      // 當成功返回資料到後臺併成功獲取後臺返回的資料時,採取的動作在success函式中定義,與前面的done是類似的
            
        }
    });
});

3. 完善後臺delete()函式

@app.route('/delete', methods=['POST','GET'])
def delete():
    path = request.args.get('path')    # 因為資料是通過鍵值對匹配的,還記得前面data的兩個鍵值對嗎?
    path_ = request.args.get('path_')  # 通過“鍵”獲取對應的“值”

    if os.path.isfile(path):    # 先判斷檔案是否存在,若是,才可以有remove的意義
        os.remove(path)
    if os.path.isfile(path_):
        os.remove(path_)
    return render_template('demo.html')    # 停留在本頁面

總結

    在本文我們是分享瞭如何實現普通按鈕的click函式實現指定元素的value/text/innerHTML等的往後臺的傳送。

    對比上一篇博文,關於uploadfiles的實現,其大體思路還是比較相似的,即

        1)定義html標籤

        2)重寫該標籤的功能函式,如fileuploadfile函式,buttononclick函式

        3)通過定義新的url進行與後端函式的繫結

        4)用jsjQuery程式碼獲取並處理前臺的相關資料,用字典進行封裝

        5)後臺接收包含資料的字典data,通過“”獲取“

結束語

    好的,本專題至此也已全部結束大笑,這邊是上週小編所學到的東西,雖然微不足道,但十分有趣。

    最後再一次感謝各位夥伴的支援和不吝賜教!微笑