当前位置:   article > 正文

ajax与python flask之间的表单数据传输_flask formdata

flask formdata

第一步我们还是先了解python flask以及ajax的基本语法
这里我就不解释基础东西了,我们直接进入正题

一.代码功能及内容描述

  1. 传输数据形式:FormData,支持传输文本数据以及文件,可以一起穿,属于python字典的形式,或者json格式。
    在这里插入图片描述

为防止报错,使用formdata()必须在ajax语句中加入红框配置

  1. 动态加载页面:出发事件时调用ajax去先清空页面再加载数据,实现局部刷新。

清空数据:使用 .empty() 保留父标签
动态插入输入:那就得用for循环了

注意三个添加方法:

$('#hello').append("<div></div>")
这个是在标签的内部添加内容,为子及
  • 1
  • 2
$('#hello').after("<div></div>")
这个是在标签后追加代码,为同级
  • 1
  • 2
$('#hello').before("<div></div>")
这个是在标签前追加代码,为同级
  • 1
  • 2

二.关键代码

先来python flask部分:包含数据接收以及返回结果

# 注册
@app.route('/upload', methods=['GET', 'POST'])
def upload_image():
    if request.method == "POST":
        print("--- upload :")
        f = request.files['Photo']
        f_name = str(uuid.uuid1())
        f_path = "./static/upload/" + f_name + ".jpg"
        f.save(f_path)  # 存到静态文件的上传文件中
        # 记录上传文件的随机名称,下面通过列表获取,展示对比图片
        register_fileName.append(f_path)
        face_id = request.form["name"]
        print(face_id)
        # 提取特征
        img = cv2.imread("./static/upload/" + f_name + ".jpg")
        feature_list = get_face_feature(detector, recongizer, img)
        register_feature.append(feature_list[0])
        register_ID.append(face_id)
        dict_app['url_register'] = "./static/upload/" + f_name + ".jpg"
        dict_app["id"] = ""
        dict_app["conf"] = ""
        dict_app["register_fileName"] = register_fileName
        dict_app["register_ID"] = register_ID
        # 存到数据库
        db.insert(face_id, f_path, feature_list[0])
    return dict_app
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26

注:关键部
dict_app 是一个字典,我设置为全局变量
f = request.files[‘Photo’] 取出了文件
face_id = request.form[“name”] 取出了文本信息

到我们js的代码:

function upload() {
    var face_id = document.getElementById("face_id").value
    var data = new FormData()
    data.append("Photo", $("#upload-file")[0].files[0])
    data.append("name",face_id)
        $.ajax({
            url: "http://127.0.0.1:8080/upload",
            method: "post",
            timeOut: 1000,
            data: data,
            dataType: 'json',
            cache: false,//上传文件无需缓存
            processData: false,//用于对data参数进行序列化处理 这里必须false
            contentType: false, //必须
            success: function (data) {
//                $(document).ready(function(){
//                   console.log("刷新界面")
//                   $('#hello').empty()
//                   $("#hello").load(location.href + " #hello>*",  "")
//                })
                $('#hello').empty()
                $('#image_data').empty()
//                if(data.register_fileName.length>2)location.replace(location.href);  //在服务端重新生成
                console.log(data.register_fileName.length)
                //获取数据后应当把输入框数据清空 <input type="text" name="face_id" id="face_id">
                $('#face_id').val("");
                //把注册的图片加载到html对应位置
                $('#url_register').attr('src', data.url_register);
                //把历史注册记录进行展示
                 let htmllet = ""
                 console.log("data.register_fileName.length"+data.register_fileName.length)
                 //每次加载新标签前把上次添加的标签清除
                if(data.register_fileName.length>1){
//                $('#hello').remove()
//                   $('#hello').empty()
                   console.log(data.register_fileName)
                   var index =0
                   var total =0 //防止添加过长导致穿透布局 最多添加12个
                   for (var i = data.register_fileName.length-2; i >=0 ; i--) {
                        if(total<12){
                            if(index<2){
                                $('#hello').append("<img style='display:inline;' src='"+data.register_fileName[i]+"' class='register-image'>")
                              }
                            else{
                                $('#hello').append("<div></div>")
                                $('#hello').append("<img style='display:inline;' src='"+data.register_fileName[i]+"' class='register-image'>")
                                index=0
                            }

                        }
                        $('#image_data').append("<img src="+data.register_fileName[i]+" class='register-image-data'><h3 style=' margin-bottom: 30px;'>"+data.register_ID[i]+"</h3>")


                        index+=1
                        total+=1


                   }

                }

            },
            error: function (data) {
            }
        })
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66

注:
返回数据在success中,
var face_id = document.getElementById(“face_id”).value 获取的是文本信息
$(“#upload-file”)[0].files[0] 获取图片

前端的代码只展示一部分:

            <form method="post"  enctype="multipart/form-data">
                <input type="file" name="the_file" class="u-border-none u-btn u-button-style u-palette-1-base u-btn-1"
                       border="none" id="upload-file">
                <p class="u-text u-text-1">人物姓名:</p><input type="text" name="face_id" id="face_id">
                <input type="button" class="u-border-none u-btn u-button-style u-palette-1-base u-btn-1"
                       onclick="upload()" value="注册">
            </form>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

这个是表单的;只写里面的<input 就可以了

            <div id="hello">
            </div>
  • 1
  • 2

动态加载的部分就两句就可以了,如果很会用jquery选择器的话没有也可以,我这里就写个实打实的方便看

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/码创造者/article/detail/750862
推荐阅读
相关标签
  

闽ICP备14008679号