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 相关文章推荐
利用一个简单的例子窥探CPython内核的运行机制
Mar 30 Python
使用Python脚本操作MongoDB的教程
Apr 16 Python
python实现稀疏矩阵示例代码
Jun 09 Python
wxPython之解决闪烁的问题
Jan 15 Python
python3结合openpyxl库实现excel操作的实例代码
Sep 11 Python
Python flask框架post接口调用示例
Jul 03 Python
vscode写python时的代码错误提醒和自动格式化的方法
May 07 Python
使用 prometheus python 库编写自定义指标的方法(完整代码)
Jun 29 Python
Python Matplotlib简易教程(小白教程)
Jul 28 Python
通过代码实例了解Python sys模块
Sep 14 Python
python中Mako库实例用法
Dec 31 Python
OpenCV-Python实现人脸磨皮算法
Jun 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 reset() 函数指针指向数组中的第一个元素并输出实例代码
2016/11/21 PHP
Laravel框架模板继承操作示例
2018/06/11 PHP
PHP实现微信商户支付企业付款到零钱功能
2018/09/30 PHP
js中的onchange和onpropertychange (onchange无效的解决方法)
2014/03/08 Javascript
jquery如何扑捉回车键触发的事件
2014/04/24 Javascript
JQuery中的html()、text()、val()区别示例介绍
2014/09/01 Javascript
关于Bootstrap弹出框无法调用问题的解决办法
2016/03/10 Javascript
JavaScript常用本地对象小结
2016/03/28 Javascript
jQuery事件用法详解
2016/10/06 Javascript
利用jQuery来动态为属性添加或者删除属性的简单方法
2016/12/02 Javascript
微信小程序 Toast自定义实例详解
2017/01/20 Javascript
js如何获取网页所有图片
2017/05/12 Javascript
Angular2安装angular-cli
2017/05/21 Javascript
详解AngularJS跨页面传值(ui-router)
2017/08/23 Javascript
浅谈VUE监听窗口变化事件的问题
2018/02/24 Javascript
微信小程序封装分享与分销功能过程解析
2019/08/13 Javascript
使用vue-router切换页面时实现设置过渡动画
2019/10/31 Javascript
js实现单元格拖拽效果
2020/02/10 Javascript
Vue双向绑定实现原理与方法详解
2020/05/07 Javascript
[03:15]DOTA2-DPC中国联赛1月22日Recap集锦
2021/03/11 DOTA
利用Python演示数型数据结构的教程
2015/04/03 Python
Python批量转换文件编码格式
2015/05/17 Python
Pycharm 创建 Django admin 用户名和密码的实例
2018/05/30 Python
浅谈Python中的全局锁(GIL)问题
2019/01/11 Python
详解Python网络框架Django和Scrapy安装指南
2019/04/01 Python
python实现感知机线性分类模型示例代码
2019/06/02 Python
利用Python实现kNN算法的代码
2019/08/16 Python
Python基础之函数基本用法与进阶详解
2020/01/02 Python
解决Opencv+Python cv2.imshow闪退问题
2020/04/24 Python
python将unicode和str互相转化的实现
2020/05/11 Python
KIKO MILANO西班牙官网:意大利领先的化妆品和护肤品品牌
2019/05/03 全球购物
信用社实习人员自我鉴定
2013/09/20 职场文书
学生个人自我鉴定范文
2014/03/28 职场文书
初中生300字旷课检讨书
2014/11/19 职场文书
工程合作意向书范本
2015/05/09 职场文书
爱的教育读书笔记
2015/06/26 职场文书