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 21 Python
使用Python+Splinter自动刷新抢12306火车票
Jan 03 Python
PyCharm代码格式调整方法
May 23 Python
pandas数据集的端到端处理
Feb 18 Python
将python文件打包exe独立运行程序方法详解
Feb 12 Python
django 多数据库及分库实现方式
Apr 01 Python
python实现手势识别的示例(入门)
Apr 15 Python
windows下python 3.9 Numpy scipy和matlabplot的安装教程详解
Nov 28 Python
linux centos 7.x 安装 python3.x 替换 python2.x的过程解析
Dec 14 Python
python实战之用emoji表情生成文字
May 08 Python
Python机器学习之基于Pytorch实现猫狗分类
Jun 08 Python
Python下opencv库的安装过程及问题汇总
Jun 11 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
.htaccess文件保护实例讲解
2011/02/06 PHP
解析php中获取系统信息的方法
2013/06/25 PHP
php获取从百度搜索进入网站的关键词的详细代码
2014/01/08 PHP
php7 安装yar 生成docker镜像
2017/05/09 PHP
thinkphp查询,3.X 5.0方法(亲试可行)
2017/06/17 PHP
PHP7 错误处理机制修改
2021/03/09 PHP
在jQuery中 关于json空对象筛选替换
2013/04/15 Javascript
利用js制作html table分页示例(js实现分页)
2014/04/25 Javascript
nodejs 实现模拟form表单上传文件
2014/07/14 NodeJs
JQuery节点元素属性操作方法
2015/06/11 Javascript
jQuery实现网页抖动的菜单抖动效果
2015/08/07 Javascript
jquery获取文档高度和窗口高度汇总
2016/01/25 Javascript
JQuery点击行tr实现checkBox选中的简单实例
2016/05/26 Javascript
JS实现动态表格的添加,修改,删除功能(推荐)
2016/06/15 Javascript
简单实现AngularJS轮播图效果
2020/04/10 Javascript
微信小程序实现复选框效果
2018/12/28 Javascript
ES6之Proxy的get方法详解
2019/10/11 Javascript
JS实现移动端双指缩放和旋转方法
2019/12/13 Javascript
Vue组件为什么data必须是一个函数
2020/06/11 Javascript
[02:05]2014DOTA2西雅图国际邀请赛 BBC第二天小组赛总结
2014/07/11 DOTA
python实现目录树生成示例
2014/03/28 Python
使用python实现拉钩网上的FizzBuzzWhizz问题示例
2014/05/05 Python
深入浅析python 中的匿名函数
2018/05/21 Python
python pyheatmap包绘制热力图
2018/11/09 Python
在Pytorch中使用样本权重(sample_weight)的正确方法
2019/08/17 Python
python 最简单的实现适配器设计模式的示例
2020/06/30 Python
celery在python爬虫中定时操作实例讲解
2020/11/27 Python
Pytorch如何切换 cpu和gpu的使用详解
2021/03/01 Python
HTML5新增加的功能详解
2016/09/05 HTML / CSS
美国珠宝网上商店:Jeulia
2016/09/01 全球购物
小学教师事迹材料
2014/01/13 职场文书
2014信息公开实施方案
2014/02/22 职场文书
关于爱国的标语
2014/06/24 职场文书
无刑事犯罪记录证明范本
2014/09/29 职场文书
交通安全教育心得体会
2016/01/15 职场文书
中国十大神话动漫电影排行榜 哪吒登顶 白蛇缘起排第七
2022/03/21 国漫