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进程类subprocess的一些操作方法例子
Nov 22 Python
使用Protocol Buffers的C语言拓展提速Python程序的示例
Apr 16 Python
浅谈Python中列表生成式和生成器的区别
Aug 03 Python
python中安装模块包版本冲突问题的解决
May 02 Python
python自动重试第三方包retrying模块的方法
Apr 24 Python
Python实现查找数组中任意第k大的数字算法示例
Jan 23 Python
python高斯分布概率密度函数的使用详解
Jul 10 Python
python数据分析工具之 matplotlib详解
Apr 09 Python
python 匿名函数与三元运算学习笔记
Oct 23 Python
pycharm如何设置官方中文(如何汉化)
Dec 29 Python
用Python爬虫破解滑动验证码的案例解析
May 06 Python
Python Flask实现进度条
May 11 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数据入库前清理 注意php intval与mysql的int取值范围不同
2010/12/12 PHP
php通过array_merge()函数合并两个数组的方法
2015/03/18 PHP
php实现XSS安全过滤的方法
2015/07/29 PHP
php 利用array_slice函数获取随机数组或前几条数据
2015/09/30 PHP
PHP 匿名函数与注意事项详细介绍
2016/11/26 PHP
用js重建星际争霸
2006/12/22 Javascript
读jQuery之十三 添加事件和删除事件的核心方法
2011/08/23 Javascript
基于JQuery的多标签实现代码
2012/09/19 Javascript
模拟用户点击弹出新页面不会被浏览器拦截
2014/04/08 Javascript
Node.js中的缓冲与流模块详细介绍
2015/02/11 Javascript
JS实现将数字金额转换为大写人民币汉字的方法
2016/08/02 Javascript
Bootstrap作品展示站点实战项目2
2016/10/14 Javascript
jQuery中get方法用法分析
2016/12/07 Javascript
jQuery.cookie.js使用方法及相关参数解释
2017/03/06 Javascript
nodejs使用redis作为缓存介质实现的封装缓存类示例
2018/02/07 NodeJs
详解Vue3中对VDOM的改进
2020/04/23 Javascript
[03:06]3分钟带你回顾DOTA2完美盛典&完美大师赛
2017/12/06 DOTA
python的类变量和成员变量用法实例教程
2014/08/25 Python
python实现ipsec开权限实例
2014/11/11 Python
python生成式的send()方法(详解)
2017/05/08 Python
Python实现的插入排序算法原理与用法实例分析
2017/11/22 Python
关于django 数据库迁移(migrate)应该知道的一些事
2018/05/27 Python
Scrapy基于selenium结合爬取淘宝的实例讲解
2018/06/13 Python
Python决策树之基于信息增益的特征选择示例
2018/06/25 Python
Django利用cookie保存用户登录信息的简单实现方法
2019/05/27 Python
python的help函数如何使用
2020/06/11 Python
Dockers美国官方网站:卡其裤、男士服装、鞋及配件
2016/11/22 全球购物
装饰资料员岗位职责
2013/12/30 职场文书
优秀毕业生自我鉴定
2014/01/19 职场文书
开业庆典主持词
2014/03/21 职场文书
三方合作协议书范本
2014/04/18 职场文书
读后感作文评语
2014/12/25 职场文书
孔繁森观后感
2015/06/10 职场文书
Java 将PPT幻灯片转为HTML文件的实现思路
2021/06/11 Java/Android
springBoot基于webSocket实现扫码登录
2021/06/22 Java/Android
python利用while求100内的整数和方式
2021/11/07 Python