Django如何实现上传图片功能


Posted in Python onAugust 16, 2019

前言

很多时候我们要用到图片上传功能,如果图片一直用放在别的网站上,通过加载网址的方式来显示的话其实也挺麻烦的,我们通过使用 django-filer 这个模块实现将图片文件直接放在自己的网站上。

感兴趣的同学可以看下官方介绍:https://github.com/divio/django-filer

1. 使用 pip 安装。

pip install django-filer

这个模块需要 django-mptt, easy_thumbnails, django-polymorphic 以及 pillow 这些依赖包, 不过安装django-filer的时候 pip 都会自动帮我们装好这些。

2. django-filer 配置。

在 settings.py 中加入以下内容:

INSTALLED_APPS = [
  # 图片上传模块 django-filer
  'easy_thumbnails',
  'filer',
  'mptt',
]

# 支持视网膜高分辨率设备
THUMBNAIL_HIGH_RESOLUTION = True

# 处理缩列图
THUMBNAIL_PROCESSORS = (
  'easy_thumbnails.processors.colorspace',
  'easy_thumbnails.processors.autocrop',
  'filer.thumbnail_processors.scale_and_crop_with_subject_location',
  'easy_thumbnails.processors.filters',
)

# 存放图片文件夹设置
FILER_STORAGES = {
  'public': {
    'main': {
      'ENGINE': 'filer.storage.PublicFileSystemStorage',
      'OPTIONS': {
        'location': '项目路径/media/filer',
        'base_url': '/media/filer/',
      },
      'UPLOAD_TO': 'filer.utils.generate_filename.randomized',
      'UPLOAD_TO_PREFIX': 'filer_public',
    },
    'thumbnails': {
      'ENGINE': 'filer.storage.PublicFileSystemStorage',
      'OPTIONS': {
        'location': '项目路径/media/filer_thumbnails',
        'base_url': '/media/filer_thumbnails/',
      },
    },
  },
  'private': {
    'main': {
      'ENGINE': 'filer.storage.PrivateFileSystemStorage',
      'OPTIONS': {
        'location': '项目路径/smedia/filer',
        'base_url': '/smedia/filer/',
      },
      'UPLOAD_TO': 'filer.utils.generate_filename.randomized',
      'UPLOAD_TO_PREFIX': 'filer_public',
    },
    'thumbnails': {
      'ENGINE': 'filer.storage.PrivateFileSystemStorage',
      'OPTIONS': {
        'location': '项目路径/smedia/filer_thumbnails',
        'base_url': '/smedia/filer_thumbnails/',
      },
    },
  },
}
# 指定 MEDIA_URL 的位置
MEDIA_URL = '/media/'
MEIDA_ROOT = '项目路径/media/'

在上述设置中,location 是文件真正存放的文件夹地址,而 base_url 是显示时要指定的静态文件网址。

在 urls.py 中加入以下程序代码,才能把上传的图像文件当在静态文件处理:

from django.conf import settings
from django.conf.urls.static import static

urlpatterns = [
  # others urls ...
  url(r'^files/', include('filer.urls')),
  # ...
]
urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEIDA_ROOT)

上述设置完成后,同步数据库 ./manage.py migrate,让模块加上需要的数据表。执行 ./manage.py collectstatic,刷新静态文件,加载 django-filer 自己的 CSS 和 Javascript 文件。我们便能在 admin 管理页面看到多出的两个数据表。

Django如何实现上传图片功能

接着我们就可以在 Folders 数据表中进行新建文件夹,上传文件以及删除文件夹和文件等操作。

3. 把 django-filer 的图像文件添加到数据表中

使用 filer 模块提供的 FilerImageField 字段,将上传图像文件的功能整合到建立的数据项中。

在 models.py 文件中添加:

from filer.fields.image import FilerImageField

并将需要放置图片的数据表中的 image 变量改为:

image = FilerImageField(related_name='product_image')

删除 migrations 下除 __init__.py 的其他文件和 db.sqlite3 文件,重新执行 ./manage.py makemigrations 和 ./manage.pymigrate ,刷新 admin 管理页面,进入 image 字段的数据项,便可以看到 image 字段多了上传文件的功能。

Django如何实现上传图片功能

我们便可以通过点击 Choose Files 上传文件了。

上传图片后,将 html 文件中 img 地址改为

<img src='{{product.image.url}}'>

便可以正确显示图片了。

Django如何实现上传图片功能

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python利用正则表达式排除集合中字符的功能示例
Oct 10 Python
详细解读tornado协程(coroutine)原理
Jan 15 Python
Python学习笔记之Zip和Enumerate用法实例分析
Aug 14 Python
Python3 JSON编码解码方法详解
Sep 06 Python
在pycharm中配置Anaconda以及pip源配置详解
Sep 09 Python
python RC4加密操作示例【测试可用】
Sep 26 Python
python实现复制文件到指定目录
Oct 16 Python
wxPython实现分隔窗口
Nov 19 Python
Django如何使用redis作为缓存
May 21 Python
简单了解Python多态与属性运行原理
Jun 15 Python
Python虚拟环境的创建和使用详解
Sep 07 Python
python爬虫之爬取笔趣阁小说
Apr 22 Python
Python如何调用JS文件中的函数
Aug 16 #Python
用Python批量把文件复制到另一个文件夹的实现方法
Aug 16 #Python
Python Web框架之Django框架cookie和session用法分析
Aug 16 #Python
python中hasattr()、getattr()、setattr()函数的使用
Aug 16 #Python
Python中IP地址处理IPy模块的方法
Aug 16 #Python
Python3 requests文件下载 期间显示文件信息和下载进度代码实例
Aug 16 #Python
Pyinstaller 打包exe教程及问题解决
Aug 16 #Python
You might like
PHP 日志缩略名的创建函数代码
2010/05/26 PHP
作为PHP程序员应该了解MongoDB的五件事
2013/06/03 PHP
php/js获取客户端mac地址的实现代码
2013/07/08 PHP
Aster vs Newbee BO5 第二场2.19
2021/03/10 DOTA
超级强大的表单验证
2006/06/26 Javascript
javascript学习笔记(十六) 系统对话框(alert、confirm、prompt)
2012/06/20 Javascript
jQuery制作仿Mac Lion OS滚动条效果
2015/02/10 Javascript
js实现无限级树形导航列表效果代码
2015/09/23 Javascript
浅述节点的创建及常见功能的实现
2016/12/15 Javascript
Bootstrap fileinput组件封装及使用详解
2017/03/10 Javascript
vue引入jq插件的实例讲解
2017/09/12 Javascript
nodejs判断文件、文件夹是否存在及删除的方法
2017/11/10 NodeJs
Node之简单的前后端交互(实例讲解)
2017/11/14 Javascript
浅谈Emergence.js 检测元素可见性的 js 插件
2017/11/18 Javascript
jQuery图片查看插件Magnify开发详解
2017/12/25 jQuery
基于Vue中点击组件外关闭组件的实现方法
2018/03/06 Javascript
vue.js template模板的使用(仿饿了么布局)
2018/08/13 Javascript
初学vue出现空格警告的原因及其解决方案
2019/10/31 Javascript
详解Angular cli配置过程记录
2019/11/07 Javascript
JavaScript实现浏览器网页自动滚动并点击的示例代码
2020/12/05 Javascript
python实现京东秒杀功能
2018/07/30 Python
使用Scrapy爬取动态数据
2018/10/21 Python
使用python获取(宜宾市地震信息)地震信息
2019/06/20 Python
利用Pandas和Numpy按时间戳将数据以Groupby方式分组
2019/07/22 Python
在Python中字符串、列表、元组、字典之间的相互转换
2019/11/15 Python
解决django中form表单设置action后无法回到原页面的问题
2020/03/13 Python
详解pycharm连接远程linux服务器的虚拟环境的方法
2020/11/13 Python
CSS3打造百度贴吧的3D翻牌效果示例
2017/01/04 HTML / CSS
Nuts.com:优质散装,批发坚果、干果和巧克力等
2017/03/21 全球购物
奇怪的鱼:Weird Fish
2018/03/18 全球购物
北卡罗来纳州豪华家具和家居装饰店:Carolina Rustica
2018/10/30 全球购物
安全目标管理责任书
2014/07/25 职场文书
审计局2014法制宣传日活动总结
2014/11/01 职场文书
催款函范文
2015/06/24 职场文书
导游词之黄帝陵景区
2019/09/16 职场文书
聊聊Python String型列表求最值的问题
2022/01/18 Python