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的else子句使用指南
Feb 27 Python
分享Python开发中要注意的十个小贴士
Aug 30 Python
Ubuntu 下 vim 搭建python 环境 配置
Jun 12 Python
python模块之time模块(实例讲解)
Sep 13 Python
python pandas dataframe 行列选择,切片操作方法
Apr 10 Python
python3实现163邮箱SMTP发送邮件
May 22 Python
Pycharm 2020年最新激活码(亲测有效)
Sep 18 Python
Python autoescape标签用法解析
Jan 17 Python
python实现滑雪游戏
Feb 22 Python
使用Keras画神经网络准确性图教程
Jun 15 Python
python numpy中multiply与*及matul 的区别说明
May 26 Python
Anaconda配置各版本Pytorch的实现
Aug 07 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中文本操作的类
2007/03/17 PHP
PHP 面向对象实现代码
2009/11/11 PHP
CentOS 6.2使用yum安装LAMP以及phpMyadmin详解
2013/06/17 PHP
jQuery中将函数赋值给变量的调用方法
2012/03/23 Javascript
jquery实现简单的拖拽效果实例兼容所有主流浏览器
2013/06/21 Javascript
网页广告中JS代码的信息监听示例
2014/04/02 Javascript
javascirpt实现2个iframe之间传值的方法
2016/06/30 Javascript
详解获取jq ul第一个li定位的四种解决方案
2016/11/23 Javascript
基于Bootstrap和jQuery构建前端分页工具实例代码
2016/11/23 Javascript
JavaScript数据结构之二叉树的查找算法示例
2017/04/13 Javascript
jQuery实现select下拉框获取当前选中文本、值、索引
2017/05/08 jQuery
js实现移动端导航点击自动滑动效果
2017/07/18 Javascript
详解Vuejs2.0 如何利用proxyTable实现跨域请求
2017/08/03 Javascript
JS一个简单的注册页面实例
2017/09/05 Javascript
Vue结合SignalR实现前后端实时消息同步
2017/09/19 Javascript
在vue中使用Autoprefixed的方法
2018/07/27 Javascript
jQuery实现基本淡入淡出效果的方法详解
2018/09/05 jQuery
详解项目升级到vue-cli3的正确姿势
2019/01/28 Javascript
JS原型prototype和__proto__用法实例分析
2020/03/14 Javascript
Python logging模块用法示例
2018/08/28 Python
python 获取等间隔的数组实例
2019/07/04 Python
Python Websocket服务端通信的使用示例
2020/02/25 Python
基于打开pycharm有带图片md文件卡死问题的解决
2020/04/24 Python
Django 解决由save方法引发的错误
2020/05/21 Python
使用CSS3来实现滚动视差效果的教程
2015/08/24 HTML / CSS
日本PLST在线商店:日本时尚杂志刊载的人气服装
2016/12/10 全球购物
澳大利亚礼品篮网站:Macarthur Baskets
2019/10/14 全球购物
广州足迹信息技术有限公司Java软件工程师试题
2014/02/15 面试题
毕业生个人求职的自我评价
2013/10/28 职场文书
国家助学金获奖感言
2014/01/31 职场文书
厂长岗位职责
2014/02/19 职场文书
《月球之谜》教学反思
2014/04/10 职场文书
Mysql 性能监控及调优
2021/04/06 MySQL
Redis RDB技术底层原理详解
2021/09/04 Redis
基于HTML十秒做出淘宝页面
2021/10/24 HTML / CSS
分析SQL窗口函数之聚合窗口函数
2022/04/21 Oracle