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 Sleep休眠函数使用简单实例
Feb 02 Python
简单掌握Python的Collections模块中counter结构的用法
Jul 07 Python
python 线程的暂停, 恢复, 退出详解及实例
Dec 06 Python
基于Python实现的ID3决策树功能示例
Jan 02 Python
Python实现发送与接收邮件的方法详解
Mar 28 Python
Tensorflow 实现修改张量特定元素的值方法
Jul 30 Python
带你认识Django
Jan 15 Python
python基于itchat模块实现微信防撤回
Apr 29 Python
python读取raw binary图片并提取统计信息的实例
Jan 09 Python
Tensorflow tf.dynamic_partition矩阵拆分示例(Python3)
Feb 07 Python
Python加速程序运行的方法
Jul 29 Python
python Matplotlib基础--如何添加文本和标注
Jan 26 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根据分类合并数组的方法实例详解
2013/11/06 PHP
laravel安装zend opcache加速器教程
2015/03/02 PHP
CI(Codeigniter)的Setting增强配置类实例
2016/01/06 PHP
PHP中的Trait 特性及作用
2016/04/03 PHP
Yii框架使用PHPExcel导出Excel文件的方法分析【改进版】
2019/07/24 PHP
javascript两段代码,两个小技巧
2010/02/04 Javascript
Javascript事件热键兼容ie|firefox
2010/12/30 Javascript
jQuery 源码分析笔记(5) jQuery.support
2011/06/19 Javascript
jquery刷新页面的实现代码(局部及全页面刷新)
2011/07/11 Javascript
JavaScript简单实现鼠标拖动选择功能
2014/03/06 Javascript
javascript在网页中实现读取剪贴板粘贴截图功能
2014/06/07 Javascript
jQuery圆形统计图开发实例
2015/01/04 Javascript
jQuery数据缓存用法分析
2015/02/20 Javascript
jquery插件格式实例分析
2016/06/16 Javascript
原生js实现中奖信息无间隙滚动效果
2017/01/18 Javascript
初学者AngularJS的环境搭建过程
2017/10/27 Javascript
js实现简单选项卡功能
2020/03/23 Javascript
python将人民币转换大写的脚本代码
2013/02/10 Python
python操作xml文件详细介绍
2014/06/09 Python
python中列表元素连接方法join用法实例
2015/04/07 Python
Python 类与元类的深度挖掘 I【经验】
2016/05/06 Python
Python实现将数据库一键导出为Excel表格的实例
2016/12/30 Python
Django实现单用户登录的方法示例
2019/03/28 Python
Linux上使用Python统计每天的键盘输入次数
2019/04/17 Python
深入了解Python iter() 方法的用法
2019/07/11 Python
详解Python可视化神器Yellowbrick使用
2019/11/11 Python
如何基于python操作json文件获取内容
2019/12/24 Python
Python库skimage绘制二值图像代码实例
2020/04/10 Python
Python 利用OpenCV给照片换底色的示例代码
2020/08/03 Python
英国领先的杂志订阅网站:Magazine.co.uk
2018/01/25 全球购物
北美Newegg打造的全球尖货海购平台:tt海购
2018/09/28 全球购物
Abbacino官网:包、钱包和女士配饰
2019/04/15 全球购物
意大利在线大学图书馆:Libreria universitaria
2019/07/16 全球购物
机械工程系毕业生求职信
2013/09/27 职场文书
国际贸易专业求职信
2014/06/04 职场文书
Vue如何实现组件间通信
2021/05/15 Vue.js