Flask Web開發入門(九)之表單處理 - 新聞資(zī)訊 - 雲南小程序開發|雲南軟件開發|雲南網站(zhàn)建設-西山區知普網絡科技工作室

159-8711-8523

雲南網建設/小程序開發/軟件開發

知識

不管是網站(zhàn),軟件還是小程序,都要直接或間接能為您産生價值,我們在追求其視覺表現的同時,更側重于功能的便捷,營銷的便利,運營的高效,讓網站(zhàn)成為營銷工具,讓軟件能切實提升企業(yè)内部管理水平和(hé)效率。優秀的程序為後期升級提供便捷的支持!

您當前位置>首頁 » 新聞資(zī)訊 » 網站(zhàn)建設 >

Flask Web開發入門(九)之表單處理

發表時間:2018-1-10

發布人:葵宇科技

浏覽次數:40

本章我們介紹Flask Web開發中(zhōng)的表單處理

application/json類型請求

  • 前台請求代碼:
            $.ajax({
                url: '/add'
                , type: 'POST'
                , data: JSON.stringify(data.field)
                , contentType: 'application/json'
                , success: function (response) {
                    console.log(response);
                    if (response.code == 0) {
                        layer.msg('新增成功!');
                    } else {
                        layer.alert('新增失敗!')
                    }
                }
            })
  • 後台捕獲請求,request.data存儲了我們的請求數據
    這裡寫圖片描述

  • 後台出處理代碼,其中(zhōng)參數d為dict類型數據request.data

def add_monitor(d):
    logger.debug('add monitor is %s' % d)
    d = json.loads(d)
    conn = monitor_db.get_connection_with_url(url)    
    # Content-Type: application/json
    conn.execute(T_Monitor.insert(), [{
        'credit_type': d['credit_type']
        , 'query_type': d['query_type']
        , 'credit_status': d['credit_status']
        , 'elapsed_time': int(random.random() * 100)
    }])

application/x-www-form-urlencoded類型請求

  • 我們稍微修改下(xià)前台發送代碼,不指定contentType參數:即指定請求内容格式。注意:雖然我們的請求數據是JSON字串,但Ajax中(zhōng)沒有指定contentType參數,那麼數據請求格式仍舊為application/x-www-form-urlencoded
         $.ajax({
                url: '/add'
                , type: 'POST'
                , data: JSON.stringify(data.field)
                , success: function (response) {
                    console.log(response);
                    if (response.code == 0) {
                        layer.msg('新增成功!');
                    } else {
                        layer.alert('新增失敗!')
                    }
                }
            })

這裡寫圖片描述

通(tōng)過後台代碼調式,我們可(kě)以看到request.form存儲了前台的請求數據如(rú)下(xià):
這裡寫圖片描述

注意上圖紅框部分:

  • request.form是一個(gè)ImmutableMultiDict類型的對象

  • request.form的鍵值key存儲了請求數據的JSON字串

  • request.form的長度為1

因此,通(tōng)過上面的代碼分析,我們定義Flask表單處理後台代碼實現如(rú)下(xià),其中(zhōng)參數d是一個(gè)ImmutableMultiDict類型對象:

# add monitor
def add_monitor(d):
    logger.debug('add monitor is %s' % d)
    conn = monitor_db.get_connection_with_url(url)

    for key in d.keys():
        logger.debug("form data is %s" % json.loads(key))
        d_dict = json.loads(key)
        conn.execute(T_Monitor.insert(), [{
            'credit_type': d_dict['credit_type']
            , 'query_type': d_dict['query_type']
            , 'credit_status': d_dict['credit_status']
            , 'elapsed_time': int(random.random() * 100)
        }])

實現效果

這裡寫圖片描述

源碼參考:https://github.com/ypmc/flask-sqlalchemy-web

相關(guān)案例查看更多