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基础教程之五种数据类型详解
Jan 12 Python
Python中顺序表的实现简单代码分享
Jan 09 Python
Python字典对象实现原理详解
Jul 01 Python
python使用requests.session模拟登录
Aug 09 Python
Python元组 tuple的概念与基本操作详解【定义、创建、访问、计数、推导式等】
Oct 30 Python
Python API自动化框架总结
Nov 12 Python
python Shapely使用指南详解
Feb 18 Python
详解django使用include无法跳转的解决方法
Mar 19 Python
解决pycharm中的run和debug失效无法点击运行
Jun 09 Python
Django框架安装及项目创建过程解析
Sep 14 Python
python实现学生信息管理系统源码
Feb 22 Python
Python序列化模块JSON与Pickle
Jun 05 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
上海牌131型七灯四波段四喇叭一级收音机
2021/03/02 无线电
我的论坛源代码(五)
2006/10/09 PHP
PHP4实际应用经验篇(2)
2006/10/09 PHP
PHP过滤黑名单关键字的方法
2014/12/01 PHP
PHP中addcslashes与stripcslashes函数用法分析
2016/01/07 PHP
php结合md5实现的加密解密方法
2016/01/25 PHP
PHP构造函数与析构函数用法示例
2016/09/28 PHP
js自定义事件及事件交互原理概述(一)
2013/02/01 Javascript
js拖拽一些常见的思路方法整理
2014/03/19 Javascript
JS实现星星评分功能实例代码(两种方法)
2016/06/09 Javascript
Ztree新增角色和编辑角色回显问题的解决
2016/10/25 Javascript
jQuery替换节点元素的操作方法
2018/03/18 jQuery
在vue中利用v-html按分号将文本换行的例子
2019/11/14 Javascript
JS实现购物车基本功能
2020/11/08 Javascript
html中创建并调用vue组件的几种方法汇总
2020/11/17 Javascript
测试、预发布后用python检测网页是否有日常链接
2014/06/03 Python
进一步探究Python中的正则表达式
2015/04/28 Python
讲解Python中运算符使用时的优先级
2015/05/14 Python
python开发之函数定义实例分析
2015/11/12 Python
用Python将一个列表分割成小列表的实例讲解
2018/07/02 Python
Python实现FTP弱口令扫描器的方法示例
2019/01/31 Python
Python使用configparser库读取配置文件
2020/02/22 Python
Python中os模块功能与用法详解
2020/02/26 Python
Python Django搭建网站流程图解
2020/06/13 Python
Eastbay官网:美国最大的运动鞋网络零售商
2016/07/27 全球购物
台湾流行服饰购物平台:OB严选
2018/01/21 全球购物
英国最全面的橄榄球联盟门票网站:Live Rugby Tickets
2018/10/06 全球购物
南京迈特望C/C++面试题
2012/07/09 面试题
DELPHI中如何调用API,可举例说明
2014/01/16 面试题
党员个人思想汇报
2013/12/28 职场文书
小学教师事迹材料
2014/01/13 职场文书
小学生检讨书大全
2014/02/06 职场文书
办公室主任职责范本
2014/03/07 职场文书
销售会计岗位职责
2014/03/15 职场文书
股东出资证明书范例
2014/10/04 职场文书
自荐信范文
2019/05/20 职场文书