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实现服务器中只重载被修改的进程的方法
Apr 30 Python
Python中max函数用法实例分析
Jul 17 Python
Python算术运算符实例详解
May 31 Python
Python实现桶排序与快速排序算法结合应用示例
Nov 22 Python
python+POP3实现批量下载邮件附件
Jun 19 Python
学习python可以干什么
Feb 26 Python
Python 中的pygame安装与配置教程详解
Feb 10 Python
Python使用扩展库pywin32实现批量文档打印实例
Apr 09 Python
python函数中将变量名转换成字符串实例
May 11 Python
idea2020手动安装python插件的实现方法
Jul 17 Python
Python 如何在字符串中插入变量
Aug 01 Python
Python实现双向链表
May 25 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 array_intersect()函数使用代码
2009/01/14 PHP
php设计模式 State (状态模式)
2011/06/26 PHP
yii中widget的用法
2014/12/03 PHP
ThinkPHP 3.2.3实现页面静态化功能的方法详解
2017/08/03 PHP
jQuery.buildFragment使用方法及思路分析
2013/01/07 Javascript
javascript实现div浮动在网页最顶上并带关闭按钮效果实例
2013/08/13 Javascript
jquery高级编程的最佳实践详解
2014/03/23 Javascript
使用DNode实现php和nodejs之间通信的简单实例
2015/07/06 NodeJs
JavaScript交换两个变量值的七种解决方案
2016/12/01 Javascript
jQuery实现二维码扫描功能
2017/01/09 Javascript
Node.JS 循环递归复制文件夹目录及其子文件夹下的所有文件
2017/09/18 Javascript
React教程之封装一个Portal可复用组件的方法
2018/01/02 Javascript
webpack的CSS加载器的使用
2018/09/11 Javascript
小程序获取周围IBeacon设备的方法
2018/10/31 Javascript
video.js 一个页面同时播放多个视频的实例代码
2018/11/27 Javascript
解决Layui 表格自适应高度的问题
2019/11/15 Javascript
javascript canvas API内容整理
2020/02/16 Javascript
解决vue axios跨域 Request Method: OPTIONS问题(预检请求)
2020/08/14 Javascript
JavaScript实现拖拽和缩放效果
2020/08/24 Javascript
Python OS模块常用函数说明
2015/05/23 Python
PyCharm 常用快捷键和设置方法
2017/12/20 Python
名片管理系统python版
2018/01/11 Python
python将txt文档每行内容循环插入数据库的方法
2018/12/28 Python
解决使用PyCharm时无法启动控制台的问题
2019/01/19 Python
Python定时任务随机时间执行的实现方法
2019/08/14 Python
win10下opencv-python特定版本手动安装与pip自动安装教程
2020/03/05 Python
python Django 反向访问器的外键冲突解决
2020/05/20 Python
生态学毕业生自荐信
2013/10/27 职场文书
医生进修自我鉴定
2014/01/19 职场文书
公司合作意向书范文
2014/07/30 职场文书
学校领导班子四风对照检查材料
2014/09/27 职场文书
简历中自我评价范文
2015/03/11 职场文书
社区环境卫生倡议书
2015/04/29 职场文书
浅谈@Value和@Bean的执行顺序问题
2021/06/16 Java/Android
高性能跳频抗干扰宽带自组网电台
2022/02/18 无线电
德生BCL3000抢先使用感受和评价
2022/04/07 无线电