Django如何实现上传图片功能

作者:希希里之海 时间:2023-04-23 17:35:01 

前言

很多时候我们要用到图片上传功能,如果图片一直用放在别的网站上,通过加载网址的方式来显示的话其实也挺麻烦的,我们通过使用 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如何实现上传图片功能

来源:https://www.cnblogs.com/weixuqin/p/9347650.html

标签:django,上传,图片,功能
0
投稿

猜你喜欢

  • Python 列表list使用介绍

    2021-01-03 09:37:16
  • 用Python画圣诞树代码示例

    2023-06-14 06:22:27
  • 详解利用上下文管理器扩展Python计时器

    2023-11-07 09:33:48
  • ThinkPHP的URL重写问题

    2024-05-05 09:16:25
  • python脚本实现统计日志文件中的ip访问次数代码分享

    2021-03-17 08:40:08
  • 使用Python脚本和ADB命令实现卸载App

    2023-04-11 03:59:39
  • Mysql8断电崩溃解决

    2024-01-25 19:12:02
  • 用CSS3和HTML5五步打造便签效果

    2012-04-25 20:47:51
  • mysql 5.7.13 winx64安装配置方法图文教程

    2024-01-25 19:43:37
  • PyCharm专业最新版2019.1安装步骤(含激活码)

    2022-10-21 19:56:06
  • Python编程中闭包的变量作用域问题解析

    2023-07-27 01:59:47
  • python threading和multiprocessing模块基本用法实例分析

    2021-08-13 04:23:49
  • 数据库性能优化之冗余字段的作用

    2011-03-03 19:21:00
  • 如何利用Python实现自动打卡签到的实践

    2021-06-07 06:03:38
  • 利用Python和OpenCV库将URL转换为OpenCV格式的方法

    2021-08-10 13:41:43
  • 详解Vue进阶构造属性

    2024-05-09 15:22:02
  • 对Python强大的可变参数传递机制详解

    2021-06-23 02:54:09
  • Python基于pyecharts实现关联图绘制

    2021-04-08 12:05:45
  • 使用Perl创建指定编码格式(如utf-8)文件的实现代码

    2023-07-28 08:11:11
  • python双向循环链表实例详解

    2023-08-04 04:53:06
  • asp之家 网络编程 m.aspxhome.com