Flask Web开发入门(九)之表单处理 - 新闻资讯 - 云南小程序开发|云南软件开发|云南网站建设-昆明葵宇信息科技有限公司

159-8711-8523

云南网建设/小程序开发/软件开发

知识

不管是网站,软件还是小程序,都要直接或间接能为您产生价值,我们在追求其视觉表现的同时,更侧重于功能的便捷,营销的便利,运营的高效,让网站成为营销工具,让软件能切实提升企业内部管理水平和效率。优秀的程序为后期升级提供便捷的支持!

您当前位置>首页 » 新闻资讯 » 网站建设 >

Flask Web开发入门(九)之表单处理

发表时间:2018-1-10

发布人:葵宇科技

浏览次数:41

本章我们介绍Flask Web开发中的表单处理

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存储了我们的请求数据
    这里写图片描述

  • 后台出处理代码,其中参数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类型请求

  • 我们稍微修改下前台发送代码,不指定contentType参数:即指定请求内容格式。注意:虽然我们的请求数据是JSON字串,但Ajax中没有指定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('新增失败!')
                    }
                }
            })

这里写图片描述

通过后台代码调式,我们可以看到request.form存储了前台的请求数据如下:
这里写图片描述

注意上图红框部分:

  • request.form是一个ImmutableMultiDict类型的对象

  • request.form的键值key存储了请求数据的JSON字串

  • request.form的长度为1

因此,通过上面的代码分析,我们定义Flask表单处理后台代码实现如下,其中参数d是一个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

相关案例查看更多