python - Django:让管理员获取图像文件,但将其存储为 base64 字符串

标签 python django image django-models base64

我的任务是创建一个管理 View ,以便用户可以输入图像文件,但是该文件将作为模型字段存储为 Base64 字符串,而不是存在于我们服务器上的静态文件目录中。

我不清楚这个过程到底是如何完成的,我是否应该从管理 View 拦截 POST 请求并对其进行预处理以将其存储在字段中?我应该覆盖基本表单的保存方法吗?由于我是 Django 新手并且无法产生工作结果,因此我对不同的方法有点困惑。

这是我的设置:

models.py

from django.db import models

class Product(models.Model):
    organization = models.ForeignKey(Organization)
    name = models.CharField(max_length=50) 
    logo = models.TextField() 

admin.py

from django.contrib import admin
from .models import Product 

class ProductAdmin(admin.ModelAdmin):
    exclude = ('logo',)

admin.site.register(Product, ProductAdmin)

misc.py

#how i'd process an image?
from PIL import Image
from base64 import b64encode

def image_to_b64(image_file):
    imgdata = Image(image_file)
    encoded = b64encode(open(imgdata, 'rb'))
    return encoded

最佳答案

from django.db import models

class Product(models.Model):
    organization = models.ForeignKey(Organization)
    name = models.CharField(max_length=50) 
    logo = models.TextField()
    logo_image = models.ImageFiled(null=True, blank=True, upload_to='logo')


def image_to_b64(image_file):
    import base64
    with open(image_file.path, "rb") as f:
        encoded_string = base64.b64encode(f.read())
        return encoded_string

from django.dispatch import receiver
from django.db.models.signals import post_save, m2m_changed


@receiver(post_save, sender=Product)
def create_base64_str(sender, instance=None, created=False, **kwargs):
    if created:
        instance.logo = image_to_b64(instance.logo_image)
        instance.logo_image.delete()
        instance.save()

关于python - Django:让管理员获取图像文件,但将其存储为 base64 字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44489375/

相关文章:

python - 将函数应用于分组 Pandas 数据框中的列并将输出作为新列返回

python - 在 Windows 上的 Python 中使用 GLFW

django - 如何缩略图静态文件?

python - 时间数据 '2015-08-19 11:11:51 %z' 与格式 '%Y-%m-%d %H:%M:%S +0000' 不匹配

html - 翻转图像不工作 - Dreamweaver CS6

node.js - Nodejs 按坐标裁剪图像

python - 如何在 python 中创建等效结构并使用 malloc 更改空指针的引用

python - 如何使用 python 3.7 (Spyder) 计算数据读数的移动平均值?

django - manage.py - 不在项目文件夹中?

java - 与 BufferedImage 协调越界异常