Django实现图片上传功能步骤解析


Posted in Python onApril 22, 2020

1.首先是html页面的form表单的三大属性,action是提交到哪,method是提交方式,enctype只要有图片上传就要加这个属性

Django框架自带csrf_token ,所以需要在前端页面也生成csrf_token字符串,来验证真实客户

<form action="/pic_upload/" method="POST" enctype="multipart/form-data">
    
{% csrf_token %}
    
<input type="file" name="file">
    
<input type="submit" value="提交">
  
 </form>

2.如下是上传图片的接口:

def pic_upload(request):
  if request.method == "GET":
    return render(request,"helloapp/pic_upload.html",locals())
  if request.method == "POST":
    error = ""
    fp = request.FILES.get("file")
    # fp 获取到的上传文件对象
    if fp:
      path = os.path.join(STATICFILES_DIRS[0],'image/' + fp.name)  # 上传文件本地保存路径, image是static文件夹下专门存放图片的文件夹
      # fp.name #文件名
      #yield = fp.chunks() # 流式获取文件内容
      # fp.read() # 直接读取文件内容
      if fp.multiple_chunks():  # 判断上传文件大于2.5MB的大文件
        # 为真
        file_yield = fp.chunks()  # 迭代写入文件
        with open(path,'wb') as f:
          for buf in file_yield:   # for情况执行无误才执行 else
            f.write(buf)
          else:
            print("大文件上传完毕")
      else:
        with open(path,'wb') as f:
          f.write(fp.read())
        print("小文件上传完毕")
      models.ImgPath.objects.create(path=('image/' + fp.name))   # image是static文件夹下专门存放图片的文件夹
    else:
      error = "文件上传为空"
      return render(request,"helloapp/pic_upload.html",locals())
    return redirect("helloapp/pic_index/") # 重定向到首页

3.做个图片展示的页面,对图片展示对应的接口传过来的参数加以判断

{% for img in imgs %}
   <img src="{% static img.path %}">
   {% empty %}
   <h1>您没有上传任何图片</h1>
   {% endfor %}

4.图片展示的接口:

def pic_index(request):
  imgs = models.ImgPath.objects.all()
  return render(request,'helloapp/pic_index.html',locals())

至此,Django中一个简单的图片上传到展示就做好了

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python的迭代器与生成器实例详解
Jul 16 Python
python批量提取word内信息
Aug 09 Python
Python应用03 使用PyQT制作视频播放器实例
Dec 07 Python
python实现斐波那契数列的方法示例
Jan 12 Python
python简单图片操作:打开\显示\保存图像方法介绍
Nov 23 Python
python输入多行字符串的方法总结
Jul 02 Python
python中几种自动微分库解析
Aug 29 Python
Python PIL库图片灰化处理
Apr 07 Python
Python包和模块的分发详细介绍
Jun 19 Python
opencv 图像礼帽和图像黑帽的实现
Jul 07 Python
Python自动发送和收取邮件的方法
Aug 12 Python
Python爬虫之Selenium鼠标事件的实现
Dec 04 Python
Django框架配置mysql数据库实现过程
Apr 22 #Python
jupyter notebook 实现matplotlib图动态刷新
Apr 22 #Python
解决matplotlib.pyplot在Jupyter notebook中不显示图像问题
Apr 22 #Python
查看jupyter notebook每个单元格运行时间实例
Apr 22 #Python
Django数据结果集序列化并展示实现过程
Apr 22 #Python
jupyter notebook中新建cell的方法与快捷键操作
Apr 22 #Python
TensorFlow使用Graph的基本操作的实现
Apr 22 #Python
You might like
简单易用的计数器(数据库)
2006/10/09 PHP
php使用parse_str实现查询字符串解析到变量中的方法
2017/02/17 PHP
XML的代替者----JSON
2007/07/21 Javascript
在chrome中window.onload事件的一些问题
2010/03/01 Javascript
jquery操作cookie插件分享
2014/01/14 Javascript
javascript数组操作总结和属性、方法介绍
2014/04/05 Javascript
JQuery实现表格动态增加行并对新行添加事件
2014/07/30 Javascript
JavaScript运行机制之事件循环(Event Loop)详解
2014/10/10 Javascript
Angular发布1.5正式版,专注于向Angular 2的过渡
2016/02/18 Javascript
Bootstrap文件上传组件之bootstrap fileinput
2016/11/25 Javascript
BootStrap框架个人总结(bootstrap框架、导航条、下拉菜单、轮播广告carousel、栅格系统布局、标签页tabs、模态框、菜单定位)
2016/12/01 Javascript
Vue Cli与BootStrap结合实现表格分页功能
2017/08/18 Javascript
浅谈箭头函数写法在ReactJs中的使用
2017/08/22 Javascript
实例分析JS与Node.js中的事件循环
2017/12/12 Javascript
Vue.js+Layer表格数据绑定与实现更新的实例
2018/03/07 Javascript
angularjs $http调用接口的方式详解
2018/08/13 Javascript
vue将毫秒数转化为正常日期格式的实例
2018/09/16 Javascript
vue+webpack中配置ESLint
2018/11/07 Javascript
详解使用React制作一个模态框
2019/03/14 Javascript
javascript验证form表单数据的案例详解
2019/03/25 Javascript
JavaScript队列结构Queue实现过程解析
2020/03/07 Javascript
[01:03:36]DOTA2-DPC中国联赛 正赛 VG vs Magma BO3 第二场 1月26日
2021/03/11 DOTA
Python爬取网易云音乐热门评论
2017/03/31 Python
python+selenium实现163邮箱自动登陆的方法
2017/12/31 Python
Python 函数基础知识汇总
2018/03/09 Python
windows10下python3.5 pip3安装图文教程
2018/04/02 Python
python进程池实现的多进程文件夹copy器完整示例
2019/11/27 Python
python判断all函数输出结果是否为true的方法
2020/12/03 Python
基于 HTML5 Canvas实现 的交互式地铁线路图
2018/03/05 HTML / CSS
规划编制实施方案
2014/03/15 职场文书
求职个人评价范文
2014/04/09 职场文书
遵纪守法演讲稿
2014/05/23 职场文书
办公楼租房协议书范本
2014/11/25 职场文书
应届毕业生求职信范文
2015/03/19 职场文书
杨善洲电影观后感
2015/06/04 职场文书
Vue实现跑马灯样式文字横向滚动
2021/11/23 Vue.js