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 不关闭控制台的实现方法
Oct 23 Python
用Python编写分析Python程序性能的工具的教程
Apr 01 Python
python使用post提交数据到远程url的方法
Apr 29 Python
Python中处理字符串之isalpha()方法的使用
May 18 Python
Python中subprocess的简单使用示例
Jul 28 Python
python基础教程之分支、循环简单用法
Jun 16 Python
利用python实现简单的循环购物车功能示例代码
Jul 05 Python
深入解析神经网络从原理到实现
Jul 26 Python
Python基础之函数原理与应用实例详解
Jan 03 Python
Pyspark获取并处理RDD数据代码实例
Mar 27 Python
keras中的backend.clip用法
May 22 Python
python自动化发送邮件实例讲解
Jan 04 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_map()数组函数使用说明
2011/07/12 PHP
php 多文件上传的实现实例
2016/10/23 PHP
Yii2 批量插入、更新数据实例
2017/03/15 PHP
cssQuery()的下载与使用方法
2007/01/12 Javascript
js直接编辑当前cookie的脚本
2008/09/14 Javascript
WordPress 照片lightbox效果的运用几点
2009/06/22 Javascript
javascript Demo模态窗口
2009/12/06 Javascript
jquery ajax提交整个表单元素的快捷办法
2013/03/27 Javascript
jquery验证表单中的单选与多选实例
2013/08/18 Javascript
JavaScript对象反射用法实例
2015/04/17 Javascript
onclick和onblur冲突问题的快速解决方法
2016/04/28 Javascript
babel基本使用详解
2017/02/17 Javascript
vue的toast弹窗组件实例详解
2018/05/14 Javascript
vue2.0 可折叠列表 v-for循环展示的实例
2018/09/07 Javascript
vue单页面应用打开新窗口显示跳转页面的实例
2018/09/21 Javascript
js DOM的事件常见操作实例详解
2019/12/16 Javascript
javascript设计模式 ? 装饰模式原理与应用实例分析
2020/04/14 Javascript
微信小程序之滑动页面隐藏和显示组件功能的实现代码
2020/06/19 Javascript
vue select 获取value和lable操作
2020/08/28 Javascript
Vant 在vue-cli 4.x中按需加载操作
2020/11/05 Javascript
vue 项目@change多个参数传值多个事件的操作
2021/01/29 Vue.js
[34:56]Ti4冒泡赛LGD vs Liquid 1
2014/07/14 DOTA
Python多进程同步简单实现代码
2016/04/27 Python
Pycharm技巧之代码跳转该如何回退
2017/07/16 Python
python实现简单中文词频统计示例
2017/11/08 Python
pycharm通过anaconda安装pyqt5的教程
2020/03/24 Python
Python过滤序列元素的方法
2020/07/31 Python
德国体育用品网上商店:SC24.com
2016/08/01 全球购物
Volcom英国官方商店:美国殿堂级滑板、冲浪、滑雪服装品牌
2019/03/13 全球购物
Can a struct inherit from another class? (结构体能继承类吗)
2014/07/22 面试题
九年级科学教学反思
2014/01/29 职场文书
销售团队激励口号
2014/06/06 职场文书
python实现简单倒计时功能
2021/04/21 Python
如何使用pdb进行Python调试
2021/06/30 Python
Java 语言中Object 类和System 类详解
2021/07/07 Java/Android
Pygame Event事件模块的详细示例
2021/11/17 Python