设为首页 加入收藏

TOP

ajax与文件上传(二)
2019-01-09 14:09:04 】 浏览:191
Tags:ajax 文件 上传
f
name(request): dic={'name':None} name=request.POST.get('user') obj=UserInfo.objects.filter(name=name).first() if obj : dic['name']=True return JsonResponse(dic)

  1.3 呈现出来的页面

  当我们在名字栏输入数据后并且失去焦点后,就会触发一个ajax请求,它会把写在名字栏的数据发到服务器,服务器从数据库判断是否用户名已经存在,然后给ajax返回一个结果。这整个过程中,页面是不会刷新的。只是通过java script在页面上添加节点而已

  二、文件上传

  1,请求头contentType:指的请求体的打包方式,总共有三种类型

  1.1 application/x-www-form-urlencoded

  这是post请求方式最常见的打包方式,如果不进行设置,都会默认这种打包方式。浏览器的原生form表单,如果不设置enctype属性,就默认这种方式打包数据。

user=alex&pwd=123    这就是这种方式打包后的数据结构

  1.2 multipart/from-data

  基于form表单上传文件,就必须让form表单的enctype等于multipart/form-data

  基于ajax上传文件时,我们就要用到Formdata类

$('.submit').click(function () {
            var formdata=new FormData();
            formdata.append('file',$('.file')[0].files[0]);     #插入上传文件的内容
            $.ajax({
                url:'/file/',
                type:'post',
                contentType:false,       #这一句和下一句是必须加上的
                processData:false,
                data:formdata,
                success:function (data) {
                    $('.c1').html(data)
                }
            })
        })

  1.3 application/json

  在用ajax请求时,可以把contentType改成json,但此时的数据类型就必须json数据类型

如果不用Json类型打包的话,ajax也会默认urlencoded模式打包,数据书写格式为:
data:{user:'hh',pwd:123}
但当设置contentType='json',此时数据打包方式就变了,数据必须是json格式,所以现在该如下面这样写
data:JSON.strinigfy({user:'hh',pwd:123})

  2,基于form表单的文件上传

  2.1 HTML文件

<form action="" method="post" enctype="multipart/form-data">
        {% csrf_token %}
        <input type="file" name="file">
        <input type="submit">
    </form>

  2.2 视图

def file(request):
    if request.method=='GET':
        return render(request,'file.html')
    else:
        file_obj=request.FILES.get('file')
        name=file_obj.name
        with open(os.path.join('imgs',name),'wb') as f:
            for line in file_obj:
                f.write(line)
        return HttpResponse('上传成功')

  3,基于ajax的文件上传

  3.1 HTML文件

 <input type="file" class="file">
    <input type="button" class="submit" value="submit">
    <p class="c1"></p>
    <script>
        $('.submit').click(function () {
            var formdata=new FormData();
            formdata.append('file',$('.file')[0].files[0]);
            $.ajax({
                url:'/file/',
                type:'post',
                contentType:false,
                processData:false,
                data:formdata,
                success:function (data) {
                    $('.c1').html(data)
                }
            })
        })
    </script>

  3.2 视图

def file(request):
    if request.method=='GET':
        return render(request,'file.html')
    else:
        file_obj=request.FILES.get('file')
        name=file_obj.name
        with open(os.path.join('imgs',name),'wb') as f:
            for line in file_obj:
                f.write(line)
        return HttpResponse('上传成功')
首页 上一页 1 2 下一页 尾页 2/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇Python多版本情况下快速进入交互.. 下一篇英语学习自测神器——用python爬..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目