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正则表达式的使用范例详解
Aug 08 Python
python获取mp3文件信息的方法
Jun 15 Python
Python实现批量转换文件编码的方法
Jul 28 Python
python添加模块搜索路径和包的导入方法
Jan 19 Python
分享PyCharm的几个使用技巧
Nov 10 Python
学Python 3的理由和必要性
Nov 19 Python
Python 私有化操作实例分析
Nov 21 Python
将 Ubuntu 16 和 18 上的 python 升级到最新 python3.8 的方法教程
Mar 11 Python
python属于跨平台语言码
Jun 09 Python
Python基于xlrd模块处理合并单元格
Jul 28 Python
Python常用外部指令执行代码实例
Nov 05 Python
Django中如何用xlwt生成表格的方法步骤
Jan 31 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
javascript的offset、client、scroll使用方法详解
2012/12/25 Javascript
Jquery 数组操作大全个人总结
2013/11/13 Javascript
快速解决jQuery与其他库冲突的方法介绍
2014/01/02 Javascript
原生js仿jq判断当前浏览器是否为ie,精确到ie6~8
2014/08/30 Javascript
使用Chrome浏览器调试AngularJS应用的方法
2015/06/18 Javascript
JavaScript中数据结构与算法(三):链表
2015/06/19 Javascript
javascript实现根据iphone屏幕方向调用不同样式表的方法
2015/07/13 Javascript
js判断浏览器类型及设备(移动页面开发)
2015/07/30 Javascript
jQuery实现下滑菜单导航效果代码
2015/08/25 Javascript
基于javascript代码实现通过点击图片显示原图片
2015/11/29 Javascript
AngularJs 利用百度地图API 定位当前位置 获取地址信息
2017/01/18 Javascript
nodejs后台集成ueditor富文本编辑器的实例
2017/07/11 NodeJs
js 发布订阅模式的实例讲解
2017/09/10 Javascript
JS+canvas绘制的动态机械表动画效果
2017/09/12 Javascript
vue过滤器用法实例分析
2019/03/15 Javascript
深入理解vue中的slot与slot-scope
2019/04/22 Javascript
Vue 处理表单input单行文本框的实例代码
2019/05/09 Javascript
Vue全局loading及错误提示的思路与实现
2019/08/09 Javascript
前端开发基础javaScript的六大作用
2020/08/06 Javascript
python爬取哈尔滨天气信息
2018/07/14 Python
Python基于OpenCV库Adaboost实现人脸识别功能详解
2018/08/25 Python
详解Python爬取并下载《电影天堂》3千多部电影
2019/04/26 Python
Python Threading 线程/互斥锁/死锁/GIL锁
2019/07/21 Python
Python+OpenCV 实现图片无损旋转90°且无黑边
2019/12/12 Python
pycharm双击无响应(打不开问题解决办法)
2020/01/10 Python
python 解决tqdm模块不能单行显示的问题
2020/02/19 Python
Python代码中如何读取键盘录入的值
2020/05/27 Python
在keras里实现自定义上采样层
2020/06/28 Python
基于HTML5代码实现折叠菜单附源码下载
2015/11/27 HTML / CSS
美国购买舞会礼服网站:Couture Candy
2019/12/29 全球购物
幼儿园大班新学期寄语
2014/01/18 职场文书
3的组成教学反思
2014/04/30 职场文书
个人授权委托书范本格式
2014/10/12 职场文书
董事长岗位职责
2015/02/13 职场文书
班组长如何制订适合本班组的工作计划?
2019/07/10 职场文书
《原神》新角色演示“神里绫人:林隐泓洄” 宠妹狂魔
2022/04/03 其他游戏