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使用PIL库实现验证码图片的方法
Mar 11 Python
python实现unicode转中文及转换默认编码的方法
Apr 29 Python
Python使用openpyxl读写excel文件的方法
Jun 30 Python
python处理按钮消息的实例详解
Jul 11 Python
Python正则表达式非贪婪、多行匹配功能示例
Aug 08 Python
python 生成器协程运算实例
Sep 04 Python
python机器学习之决策树分类详解
Dec 20 Python
python列表生成式与列表生成器的使用
Feb 23 Python
django迁移数据库错误问题解决
Jul 29 Python
如何为Python终端提供持久性历史记录
Sep 03 Python
Python turtle库的画笔控制说明
Jun 28 Python
python 如何获取页面所有a标签下href的值
May 06 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
星际争霸秘籍
2020/03/04 星际争霸
php执行sql语句的写法
2009/03/10 PHP
php fckeditor 调用的函数
2009/06/21 PHP
php&amp;mysql 日期操作小记
2012/02/27 PHP
PHP查看SSL证书信息的方法
2016/09/22 PHP
php+redis实现注册、删除、编辑、分页、登录、关注等功能示例
2017/02/15 PHP
php封装的mongodb操作类代码
2017/08/06 PHP
关于图片验证码设计的思考
2007/01/29 Javascript
JS下拉缓冲菜单示例代码
2013/08/30 Javascript
jquery简单实现幻灯片的方法
2015/08/03 Javascript
javascript css红色经典选项卡效果实现代码
2016/05/17 Javascript
AngularJS教程之简单应用程序示例
2016/08/16 Javascript
详解AngularJS如何实现跨域请求
2016/08/22 Javascript
JS实现导出Excel的五种方法详解【附源码下载】
2018/03/15 Javascript
vue生成token并保存到本地存储中
2018/07/17 Javascript
使用JQuery自动完成插件Auto Complete详解
2019/06/18 jQuery
Vue 权限控制的两种方法(路由验证)
2019/08/16 Javascript
JavaScript实现更换背景图片
2019/10/18 Javascript
在JavaScript中实现链式调用的实现
2019/12/24 Javascript
Python3.2中Print函数用法实例详解
2015/05/19 Python
python笔记:mysql、redis操作方法
2017/06/28 Python
使用python语言,比较两个字符串是否相同的实例
2018/06/29 Python
基于python3实现socket文件传输和校验
2018/07/28 Python
在pandas多重索引multiIndex中选定指定索引的行方法
2018/11/16 Python
pytorch中的inference使用实例
2020/02/20 Python
python实现ssh及sftp功能(实例代码)
2020/03/16 Python
python实现简单坦克大战
2020/03/27 Python
Python Scrapy多页数据爬取实现过程解析
2020/06/12 Python
python进度条显示之tqmd模块
2020/08/22 Python
几道数据库的概念性面试题
2014/05/30 面试题
abstract 可以和 virtual 一起使用吗?可以和 override 一起使用吗?
2012/10/15 面试题
新锐科技Java程序员面试题
2016/07/25 面试题
计算机学生求职信范文
2014/01/30 职场文书
责任担保书范文
2014/05/21 职场文书
环保标语口号
2014/06/13 职场文书
无线电知识基础入门篇
2022/02/18 无线电