如何保存由qrcode,Django生成的图像?

时间:2017-11-04 11:57:21

标签: django django-views

如何将图像加载到bd,生成时我生成qr图像(QRcode),我需要在bd中创建一个新记录,以保存此图像并编码heslef

这是我的模特

class QRCode(models.Model):
    user                                = models.ForeignKey(UserProfile, blank=True, default=None)
    qr_code                             = models.CharField(max_length=120)
    qr_code_img                         = models.ImageField(upload_to="qr_code_img/", width_field="width_field", height_field="height_field")
    upcoming_show                       = models.ForeignKey(SectionUpcomingShow)
    width_field                         = models.IntegerField(default=270)
    height_field                        = models.IntegerField(default=270)
    is_active                           = models.BooleanField(default=True)
    timestamp                           = models.DateTimeField(auto_now=False, auto_now_add=True)
    updated                             = models.DateTimeField(auto_now_add=False, auto_now=True)

    def __str__(self):
        return "{0} - - {1}".format(self.user.username, self.is_active) 

    class Meta:
        ordering                        = ["-timestamp"]
        verbose_name                    = 'QRCode'
        verbose_name_plural             = 'QRCodes'

    @property
    def image_path(self):
        return os.path.abspath(self.qr_code_img)

这是对gen qrimg

的看法
def qr_code_generator(hex_code, username, __show__id, __show__name__, __show__q, price):
    qr_code_generate_himslef = pyqrcode.create(hex_code)
    generate_name       = ''.join(username + '_' + str(__show__id) + '_' + __show__name__ + '_' + str(__show__q) + '_' + str(price) + '.png').replace(" ", "_")
    qr_code_generate_himslef.png(generate_name, scale=6)
    print(qr_code_generate_himslef)
    return qr_code_generate_himslef

当我打印此功能时,我得到了这个

QRCode(content=b'f40a03cb6026d68f0f83c43b47c9e388ed106848', error='H', version=5, mode='binary')

这是我的保存视图

new_qr_code, created = QRCode.objects.get_or_create(user=get_user_profile, qr_code=hex_code, is_active=True, defaults={"user":get_user_profile, "qr_code":hex_code, "qr_code_img":qr_img, "upcoming_show":get_upcoming_show})
if not created:
    pass

1 个答案:

答案 0 :(得分:1)

运行此功能时

def qr_code_generator(hex_code, username, __show__id, __show__name__, __show__q, price):
    qr_code_generate_himslef = pyqrcode.create(hex_code)
    generate_name       = ''.join(username + '_' + str(__show__id) + '_' + __show__name__ + '_' + str(__show__q) + '_' + str(price) + '.png').replace(" ", "_")
    qr_code_generate_himslef.png(generate_name, scale=6)
    print(qr_code_generate_himslef)
    return qr_code_generate_himslef

qr_code图像文件将在您的根目录(具有manage.py文件的目录)中生成,其名称为'generate_name'变量值。

然后打开那个图像

import os
from django.core.files import File

with open(generate_name, 'rb') as qr_img:
   new_qr_code, created = QRCode.objects.get_or_create(user=get_user_profile, qr_code=hex_code, is_active=True, defaults={"user":get_user_profile, "qr_code":hex_code, "qr_code_img":File(qr_img), "upcoming_show":get_upcoming_show})
   if not created:
      pass

并且您的qr_image将上传到模特字段中给出的'upload_to'位置。您可以将此代码放在try块中以避免异常。

然后你可以删除该函数生成的无用的qr代码图像

os.remove(generate_name)
希望它有所帮助...