zoukankan      html  css  js  c++  java
  • Django ajax 上传

    上传数据

    发送

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Ajax</title>
    </head>
    <body>
    
    <form>
        <label for="username">账号</label>
        <input id="username" type="text">
        <label for="password">密码</label>
        <input id="password" type="password">
    </form>
    <button class="btn">提交</button>
    
    <script src="/static/jquery.js"></script>
    <script>
        $('.btn').click(function () {
            var username = $('#username').val();
            var password = $('#password').val();
            $.ajax({
                url:'/info',
                type:'post',
                data:{'username':username,'password':password},
                success:function () {
                    alert('成功')
                },
                error:function () {
                    alert('失败')
                }
            })
        })
    </script>
    </body>
    </html>

    接收

    from django.shortcuts import render
    
    # Create your views here.
    
    def index(request):
        return render(request,'index.html')
    
    def info(request):
        if request.method == "POST":
            print(request.POST)
            return render(request,'info.html')

    结果

    上传文件

    发送

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Ajax</title>
    </head>
    <body>
    
    <form id="form-upload" enctype="multipart/form-data">
        <input id="picture" type="file" name="picture">
        <!-- 上传多文件,添加multiple -->
        <!-- <input id="picture" type="file" name="picture" multiple="multiple"> -->
    </form>
    <button class="btn">上传</button>
    
    <script src="/static/jquery.js"></script>
    <script>
        $('.btn').click(function () {
            var formData = new FormData(); // 可以传一个form
            var picture = $('#picture')[0].files[0]; // 获取文件对象
            formData.append('picture',picture); // 图片
            formData.append('name','kidd'); // 字符串
            $.ajax({
                url:'/upload',
                type:'post',
                data:formData,
                cache: false,
                processData: false, // 告诉jQuery不要去处理发送的数据
                contentType : false, // 告诉jQuery不要去设置Content-Type请求头
                success:function () {
                    alert('成功')
                },
                error:function () {
                    alert('失败')
                }
            })
        })
    </script>
    </body>
    </html>

    接收

    from django.shortcuts import render,HttpResponse
    
    def upload(request):
        if request.method == 'GET':
            return render(request,'upload.html')
    
        if request.method == "POST":
            name = request.POST.get('name')
            picture = request.FILES.get('picture')
            if picture:
                path = 'static/%s'%picture.name
                with open(path,'wb') as f:
                    for chunk in picture.chunks(): # 文件小的话,可以直接读取,使用read()
                        f.write(chunk)
    
            return HttpResponse('')

    注意

    let fo = document.queryselect('form')
    let formData = new FormData(fo)
    console.log(formData)  //这样输出,formData里面是没有数据的
    以为在控制台中访问不到formData的数据,你在控制台看到的是FormData原型,存储的数据没有以对象属性的方式体现,可以理解为类的私有字段,外界访问不到,但是你可以通过formData.get("name")的方式获取到对应的表单数据。
    还有千万不要写错字,例如:formData。如果报错文件是发不出去的。
  • 相关阅读:
    【Rust】文件操作
    【Rust】转义字符
    【Rust】原始标识符
    【Rust】字节数组
    【Rust】文档测试
    【Rust】外部函数接口
    【Rust】不安全操作
    【Rust】单元测试
    【Rust】集成测试
    WPF之ComboBox 安静点
  • 原文地址:https://www.cnblogs.com/py-peng/p/12643903.html
Copyright © 2011-2022 走看看