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中用Descriptor实现类级属性(Property)详解
Sep 18 Python
Python使用面向对象方式创建线程实现12306售票系统
Dec 24 Python
对python:print打印时加u的含义详解
Dec 15 Python
python直接获取API传递回来的参数方法
Dec 17 Python
Python使用post及get方式提交数据的实例
Jan 24 Python
python实现比较类的两个instance(对象)是否相等的方法分析
Jun 26 Python
Python实现网页截图(PyQT5)过程解析
Aug 12 Python
对Tensorflow中Device实例的生成和管理详解
Feb 04 Python
20行Python代码实现视频字符化功能
Apr 13 Python
Iconfont(矢量图标)+iconmoon(图标svg互转)配合javascript实现社交分享系统
Apr 21 Python
python用700行代码实现http客户端
Jan 14 Python
Python离线安装openpyxl模块的步骤
Mar 30 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 验证码制作(网树注释思想)
2009/07/20 PHP
Eclipse中php插件安装及Xdebug配置的使用详解
2013/04/25 PHP
关于PHP的curl开启问题探讨
2014/04/08 PHP
php中将一段数据存到一个txt文件中并显示其内容
2014/08/15 PHP
探究Laravel使用env函数读取环境变量为null的问题
2016/12/06 PHP
php获取POST数据的三种方法实例详解
2016/12/20 PHP
深入理解PHP的远程多会话调试
2017/09/21 PHP
PHP实现找出链表中环的入口节点
2018/01/16 PHP
php 多进程编程父进程的阻塞与非阻塞实例分析
2020/02/22 PHP
PHP标准库 (SPL)――Countable用法示例
2020/06/05 PHP
jQuery EasyUI中对表格进行编辑的实现代码
2010/06/10 Javascript
JavaScript 一道字符串分解的题目
2011/08/03 Javascript
javascript使用Promise对象实现异步编程
2016/03/01 Javascript
javascript实现根据汉字获取简拼
2016/09/25 Javascript
从零开始学习Node.js系列教程之设置HTTP头的方法示例
2017/04/13 Javascript
微信小程序 支付后台java实现实例
2017/05/09 Javascript
vue.js学习笔记之v-bind和v-on解析
2018/05/03 Javascript
使用JS获取页面上的所有标签
2018/10/18 Javascript
vue中使用mxgraph的方法实例代码详解
2019/05/17 Javascript
[49:40]2018DOTA2亚洲邀请赛小组赛 A组加赛 TNC vs Newbee
2018/04/03 DOTA
初步认识Python中的列表与位运算符
2015/10/12 Python
Python数据结构与算法之图的最短路径(Dijkstra算法)完整实例
2017/12/12 Python
浅谈用VSCode写python的正确姿势
2017/12/16 Python
Python 连接 MySQL 的几种方法
2020/09/09 Python
如何使用python写截屏小工具
2020/09/29 Python
CSS3样式linear-gradient的使用实例
2017/01/16 HTML / CSS
用CSS3实现背景渐变的方法
2015/07/14 HTML / CSS
比利时网上药店: Drogisterij.net
2017/03/17 全球购物
护士自我鉴定总结
2014/03/24 职场文书
送温暖献爱心活动总结
2014/07/08 职场文书
房屋鉴定委托书范本
2014/09/23 职场文书
爱心捐赠活动简讯
2015/07/20 职场文书
二年级数学教学反思
2016/02/16 职场文书
导游词之大雁塔景区
2019/09/17 职场文书
Go 实现英尺和米的简单单位换算方式
2021/04/29 Golang
15个值得收藏的JavaScript函数
2021/09/15 Javascript