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 相关文章推荐
wxpython 学习笔记 第一天
Mar 16 Python
Django中URL视图函数的一些高级概念介绍
Jul 20 Python
python实现跨excel的工作表sheet之间的复制方法
May 03 Python
解决安装python库时windows error5 报错的问题
Oct 21 Python
使用django-guardian实现django-admin的行级权限控制的方法
Oct 30 Python
Python 获取中文字拼音首个字母的方法
Nov 28 Python
python机器学习实现决策树
Nov 11 Python
简单了解Python3 bytes和str类型的区别和联系
Dec 19 Python
Python实现获取当前目录下文件名代码详解
Mar 10 Python
浅谈tensorflow模型保存为pb的各种姿势
May 25 Python
python中pyqtgraph知识点总结
Jan 26 Python
python生成可执行exe控制Microsip自动填写号码并拨打功能
Jun 21 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
在PHP中使用灵巧的体系结构
2006/10/09 PHP
浅析关于PHP位运算的简单权限设计
2013/06/30 PHP
zf框架db类的分页示例分享
2014/03/14 PHP
PHP的命令行命令使用指南
2015/08/18 PHP
实例讲解PHP设计模式编程中的简单工厂模式
2016/02/29 PHP
php实现生成code128条形码的方法详解
2017/07/19 PHP
Laravel框架基于中间件实现禁止未登录用户访问页面功能示例
2019/01/17 PHP
Javascript 面向对象 对象(Object)
2010/05/13 Javascript
location.href语句与火狐不兼容的问题
2010/07/04 Javascript
网页中CDATA标记的说明
2010/09/12 Javascript
JavaScript函数详解
2014/11/17 Javascript
javascript框架设计读书笔记之种子模块
2014/12/02 Javascript
node.js中的path.delimiter方法使用说明
2014/12/09 Javascript
AngularJS入门教程之路由与多视图详解
2016/08/19 Javascript
javascript稀疏数组(sparse array)和密集数组用法分析
2016/12/28 Javascript
vue中appear的用法
2017/08/17 Javascript
使用Vue-Awesome-Swiper实现旋转叠加轮播效果&amp;平移轮播效果
2019/08/16 Javascript
Python中pygal绘制雷达图代码分享
2017/12/07 Python
对python:循环定义多个变量的实例详解
2019/01/20 Python
Python零基础入门学习之输入与输出
2019/04/03 Python
详解python--模拟轮盘抽奖游戏
2019/04/12 Python
Python for循环及基础用法详解
2019/11/08 Python
Keras实现将两个模型连接到一起
2020/05/23 Python
基于python实现计算两组数据P值
2020/07/10 Python
Python爬取12306车次信息代码详解
2020/08/12 Python
HTML5之SVG 2D入门5—颜色的表示及定义方式
2013/01/30 HTML / CSS
护士自我鉴定总结
2014/03/24 职场文书
如何撰写一封出色的求职信
2014/04/27 职场文书
平安家庭示范户事迹
2014/06/02 职场文书
2015年党风廉政建设目标责任书
2015/05/08 职场文书
红楼梦读书笔记
2015/06/25 职场文书
2015年小学总务工作总结
2015/07/21 职场文书
安全生产学习心得体会
2016/01/18 职场文书
祝福语集锦:给满月宝宝的祝福语
2019/11/20 职场文书
Java org.w3c.dom.Document 类方法引用报错
2021/08/07 Java/Android
javascript Number 与 Math对象的介绍
2021/11/17 Javascript