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 随机生成中文验证码的实例代码
Mar 20 Python
Python自动化运维和部署项目工具Fabric使用实例
Sep 18 Python
Python随机生成均匀分布在单位圆内的点代码示例
Nov 13 Python
啥是佩奇?使用Python自动绘画小猪佩奇的代码实例
Feb 20 Python
对Python中TKinter模块中的Label组件实例详解
Jun 14 Python
Python迭代器iterator生成器generator使用解析
Oct 24 Python
python wav模块获取采样率 采样点声道量化位数(实例代码)
Jan 22 Python
深入浅析Python 函数注解与匿名函数
Feb 24 Python
解决pycharm中opencv-python导入cv2后无法自动补全的问题(不用作任何文件上的修改)
Mar 05 Python
TensorFlow打印输出tensor的值
Apr 19 Python
Python优秀开源项目Rich源码解析的流程分析
Jul 06 Python
Django执行源生mysql语句实现过程解析
Nov 12 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
骨王战斗力在公会成员中排不进前五,却当选了会长,原因竟是这样
2020/03/02 日漫
php实现水仙花数的4个示例分享
2014/04/08 PHP
php解析http获取的json字符串变量总是空白null
2015/03/02 PHP
php把大写命名转换成下划线分割命名
2015/04/27 PHP
PHP数组对象与Json转换操作实例分析
2019/10/22 PHP
cookie 最近浏览记录(中文escape转码)具体实现
2013/06/08 Javascript
JavaScript字符串对象toLowerCase方法入门实例(用于把字母转换为小写)
2014/10/17 Javascript
javascript简单实现图片预加载
2014/12/03 Javascript
Jquery中巧用Ajax的beforeSend方法
2016/01/20 Javascript
JS字符串的切分用法实例
2016/02/22 Javascript
基于jQuery倒计时插件实现团购秒杀效果
2016/05/13 Javascript
Bootstrap基本布局实现方法详解
2016/11/25 Javascript
Node.js 使用命令行工具检查更新
2017/06/08 Javascript
Node.js利用断言模块assert进行单元测试的方法
2017/09/28 Javascript
vue debug 二种方法
2018/09/16 Javascript
JavaScript常见事件处理程序实例总结
2019/01/05 Javascript
Vue框架TypeScript装饰器使用指南小结
2019/02/18 Javascript
vue 微信分享回调iOS和安卓回调出现错误的解决
2020/09/07 Javascript
javascript实现简单页面倒计时
2021/03/02 Javascript
python操作ssh实现服务器日志下载的方法
2015/06/03 Python
Python通过RabbitMQ服务器实现交换机功能的实例教程
2016/06/29 Python
详解Python中的静态方法与类成员方法
2017/02/28 Python
python之生成多层json结构的实现
2020/02/27 Python
Django设置Postgresql的操作
2020/05/14 Python
Python 爬取淘宝商品信息栏目的实现
2021/02/06 Python
HTML5 canvas画矩形时出现边框样式不一致的解决方法
2013/10/14 HTML / CSS
会计自我鉴定范文
2013/10/06 职场文书
护理学院专科毕业生求职信
2014/06/28 职场文书
2014年学校总务处工作总结
2014/12/08 职场文书
大三学生英语考试作弊检讨书
2015/01/01 职场文书
小学推普周活动总结
2015/05/07 职场文书
投诉信回复范文
2015/07/03 职场文书
html实现随机点名器的示例代码
2021/04/02 Javascript
Spring mvc是如何实现与数据库的前后端的连接操作的?
2021/06/30 Java/Android
使用javascript解析二维码的三种方式
2021/11/11 Javascript
使用Mysql计算地址的经纬度距离和实时位置信息
2022/04/29 MySQL