一、form表单上传文件

注意:

  1、form上需要加enctype="multipart/form-data"

  2、form提交的地址需要以/结尾

 def form_file(request):
     if request.method=="POST":
         file = request.FILES.get("file")
         with open(file.name,"wb") as f:
             for chunk in file.chunks():
                 f.write(chunk)
     return render(request,"form_file.html",locals())
 <form method="post" action="/form_file/" enctype="multipart/form-data">
     {% csrf_token %}
     <p><input type="file" name="file"></p>
     <p><input type="submit"></p>
 </form>

上传头像,用默认头像替换选择文件按钮:

     <p>
         {{ obj.img.label }}
         <label for="img"><img src="/static/img/default.png"></label>
         <input id="img" type="file" name="img">
     </p>

二、ajax上传文件

 def register(request):
     if request.method == "POST":
         form_obj = RegisterForm(request.POST)
         ret = {"status": 0, "msg": ""}
         if form_obj.is_valid():
             form_obj.cleaned_data.pop("re_pwd")
             avatar = request.FILES.get("avatar")
             models.UserInfo.objects.create(**form_obj.cleaned_data,avatar=avatar)
             return JsonResponse(ret)
         else:
             ret["status"] = 1
             ret["msg"] = form_obj.errors
             return JsonResponse(ret)
     form_obj = RegisterForm()
     return render(request,"register.html",locals())
 //ajax上传注册信息并获取错误信息
     $("#register-btn").click(function(){

         //ajax上传文件,data部分必须用对象
         var formData = new FormData();
         formData.append("username",$("#id_username").val());
         formData.append("password",$("#id_password").val());
         formData.append("re_pwd",$("#id_re_pwd").val());
         formData.append("email",$("#id_email").val());
         formData.append("avatar",$("#id_avatar")[0].files[0]);
         formData.append("csrfmiddlewaretoken",$("[name='csrfmiddlewaretoken']").val());

         $.ajax({
             url:"/register/",
             type:"post",
             //ajax上传文件需要加两个参数
             processData:false,
             contentType:false,
             data:formData,
             success:function(data){
                 if(data.status){
                     //如果有错误,则返回错误信息
                     $.each(data.msg,function(k,v){
                         //k是键,v是值,但是v是列表,错误信息可能有多个
                         $("#id_"+k).next("span").text(v[0]).parent().parent().addClass("has-error");
                     })
                 }else{
                     //如果没有错误,则跳转到指定页面
                     location.href = "/login/"
                 }
             }
         })
     })

 //输入框取得焦点时,清楚错误信息
     $("form input").focus(function(){
         $(this).next("span").text("").parent().parent().removeClass("has-error");
     });

三、iframe上传文件

Django之文件上传的更多相关文章

  1. python Django之文件上传

    python Django之文件上传 使用Django框架进行文件上传共分为俩种方式 一.方式一 通过form表单进行文件上传 #=================================== ...

  2. day56:django:csrf_token&文件上传

    目录 1.csrf介绍 2.django实现csrf_token认证 3.django实现文件上传 csrf介绍 什么是csrf? csrf:跨站请求伪造.攻击者通过HTTP请求将数据传送到服务器,从 ...

  3. Django(十七)文件上传

    http://www.cnblogs.com/wupeiqi/articles/5703697.html - 文件上传        - 普通上传        - 自定义页面上传按钮        ...

  4. 框架----Django之文件上传

    一.文件上传 1. 浏览器访问 http://127.0.0.1:8000/f1/ http://127.0.0.1:8000/f2/ 2. urls from django.conf.urls im ...

  5. Django的文件上传以及预览、存储

    思路: 文件上传通过前端的input标签,input设置display:none属性. 内容显示需要让前端通过<img>标签读取图片内容,可以通过<label>标签连接< ...

  6. Django实现文件上传功能

    文件上传 关注公众号"轻松学编程"了解更多. 1.创建上传文件夹 在static文件夹下创建uploads用于存储接收上传的文件 在settings中配置,MEDIA_ROOT=o ...

  7. Django普通文件上传

    前端代码: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF ...

  8. django 的文件上传

    template html(模板文件): <form enctype="multipart/form-data" method="POST" action ...

  9. Django处理文件上传File Uploads

    HttpRequest.FILES 表单上传的文件对象存储在类字典对象request.FILES中,表单格式需为multipart/form-data <form enctype="m ...

随机推荐

  1. JDK内置工具使用(jps、jstack、jmap、jstat)

    一.JPS 1.jps -lvm:用于查看当前机器上已装载的jvm 二.jstackjstack命令主要用来查看Java线程的调用堆栈的,可以用来分析线程问题(如死锁) 1.jstack -l pid ...

  2. Django模板语言(Template)

    1.变量 变量相关用 { { } }   逻辑相关用{% %} 2.Filter过滤器 (1)default 如果一个变量是false或者为空,使用给定的默认值. 否则,使用变量的值.   {{ va ...

  3. keras 的 Deeplabv3+ 实现遇到的问题

    代码大佬都已经写好了,具体参考:https://github.com/bonlime/keras-deeplab-v3-plus git clone 下来以后,按照指南要训练自己的数据集,只要设置好自 ...

  4. 读书笔记---<<图解HTTP>>(一)

    一.了解Web及网络基础 1. 网络基础TCP/IP 通常使用的网络包括互联网都是在TCP/IP协议族的基础上运作的,而HTTP属于它内部的一个子集. 1.1 TCP/IP协议族 像这样吧与互联网关联 ...

  5. P5239 回忆京都(洛谷3月月赛T2)

    题目描述 射命丸文在取材中发现了一个好玩的东西,叫做组合数. 组合数的定义如下:从n个不同元素中,任取m(m≤n)个元素并成一组,叫做从n个不同元素中取出m个元素的一个组合.所有组合的数量,就是组合数 ...

  6. L1-8 矩阵A乘以B (15 分)

    给定两个矩阵A和B,要求你计算它们的乘积矩阵AB.需要注意的是,只有规模匹配的矩阵才可以相乘.即若A有R​a​​行.C​a​​列,B有R​b​​行.C​b​​列,则只有C​a​​与R​b​​相等时,两 ...

  7. Grunt自动化构建环境搭建

    1.环境准备 需要安装Git.Node.Bower.Grunt.Ruby NodeJS https://nodejs.org/en/ Ruby    http://rubyinstaller.org/ ...

  8. JS操作数组-2

    1. 找出数组 arr 中重复出现过的元素 function duplicates(arr) { var result = []; var count = []; for (var i=0;i< ...

  9. 04 | 链表(上):如何实现LRU缓存淘汰算法?

    今天我们来聊聊“链表(Linked list)”这个数据结构.学习链表有什么用呢?为了回答这个问题,我们先来讨论一个经典的链表应用场景,那就是+LRU+缓存淘汰算法. 缓存是一种提高数据读取性能的技术 ...

  10. centos7只rsync+inotify

    环境: 操作系统:centos7.4 192.168.1.238 客户端 192.168.1.239 服务端 环境准备: 1.安装以下安装包lrzsz是xshell上传下载的安装包,可以忽略. yum ...