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 ZipFile模块详解
Nov 01 Python
python选择排序算法的实现代码
Nov 21 Python
Python利用pyHook实现监听用户鼠标与键盘事件
Aug 21 Python
python里对list中的整数求平均并排序
Sep 12 Python
Python数据分析之双色球统计单个红和蓝球哪个比例高的方法
Feb 03 Python
PyQt5每天必学之进度条效果
Apr 19 Python
Python实现正弦信号的时域波形和频谱图示例【基于matplotlib】
May 04 Python
Django框架实现的简单分页功能示例
Dec 04 Python
解决Python内层for循环如何break出外层的循环的问题
Jun 24 Python
pytorch神经网络之卷积层与全连接层参数的设置方法
Aug 18 Python
深度学习详解之初试机器学习
Apr 14 Python
Python 数据结构之十大经典排序算法一文通关
Oct 16 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上传
2011/07/14 PHP
CI框架给视图添加动态数据
2014/12/01 PHP
thinkPHP实现将excel导入到数据库中的方法
2016/04/22 PHP
PHP面向对象程序设计之接口的继承定义与用法详解
2018/12/20 PHP
不用ajax实现点击文字即可编辑的方法
2007/12/16 Javascript
Firefox outerHTML实现代码
2009/06/04 Javascript
JS面向对象编程之对象使用分析
2010/08/19 Javascript
解决jquery操作checkbox火狐下第二次无法勾选问题
2014/02/10 Javascript
Node.js实现JS文件合并小工具
2016/02/02 Javascript
老司机带你解读jQuery插件开发流程
2016/05/16 Javascript
javascript中mouseenter与mouseover的异同
2017/06/06 Javascript
基于jQuery解决ios10以上版本缩放问题
2017/11/03 jQuery
vue jsx 使用指南及vue.js 使用jsx语法的方法
2017/11/11 Javascript
vue跳转页面的几种方法(推荐)
2020/03/26 Javascript
使用vue实现通过变量动态拼接url
2020/07/22 Javascript
vue配置多代理服务接口地址操作
2020/09/08 Javascript
详解Python中for循环的使用
2015/04/14 Python
Python实现的科学计算器功能示例
2017/08/04 Python
Python使用sklearn实现的各种回归算法示例
2019/07/04 Python
使用python写的opencv实时监测和解析二维码和条形码
2019/08/14 Python
使用selenium和pyquery爬取京东商品列表过程解析
2019/08/15 Python
Python实现隐马尔可夫模型的前向后向算法的示例代码
2019/12/31 Python
python实现字符串和数字拼接
2020/03/02 Python
Django 返回json数据的实现示例
2020/03/05 Python
HTML5 绘制图像(上)之:关于canvas元素引领下一代web页面的问题
2013/04/24 HTML / CSS
世界上最大的乐谱选择:Sheet Music Plus
2020/01/18 全球购物
大学生职业生涯规划书范文
2014/01/14 职场文书
大专生自我评价
2014/01/28 职场文书
公司员工检讨书
2014/02/08 职场文书
房屋租赁合同解除协议书
2014/10/11 职场文书
小班上学期幼儿评语
2014/12/30 职场文书
英文自荐信范文
2015/03/25 职场文书
青年志愿者服务活动总结
2015/05/06 职场文书
小学运动会加油词
2015/07/18 职场文书
校园安全主题班会
2015/08/12 职场文书
css清除浮动clearfix:after的用法详解(附完整代码)
2023/05/21 HTML / CSS