Django:- 二维码已成功生成,但未保存到数据库

问题描述 投票:0回答:2

我正在使用

qrcode
,这是一个可以生成 QR 码的 Python 库。我想在 Django 信号中使用这个 Python 库为每个新创建的用户生成 QR 代码。但是,当创建用户时,它不会创建
Account
模型对象,并且二维码是在我的项目目录中生成的,而不是静态文件夹中。我该如何解决这个问题。

signals.py:

@receiver(post_save, sender=User)
def create_account(sender, instance, created, **kwargs):
    if created:
        random_number = ''.join(random.choices(string.digits, k=20))
        img = qrcode.make('cullize')
        img.save('default.png')
        Account.objects.create(
            user=instance, qr_code=img,
            account_id=random_number
            )
class Account(models.Model):
    user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
    qr_code = models.ImageField(upload_to='qrcode')
    account_id = models.IntegerField()
python django qr-code django-signals
2个回答
0
投票

默认情况下,我的代码将二维码图像保存在当前工作目录中。要将其保存在静态文件夹中,我需要相应地构造路径。我正在使用

os.path.join()
创建保存图像的正确路径:

@receiver(post_save, sender=User)
def create_account(sender, instance, created, **kwargs):
    if created:
        random_number = ''.join(random.choices(string.digits, k=20))
        
        
        img = qrcode.make('cullize')
        
        # Define the directory where the image should be saved within the 'media' folder
        img_dir = os.path.join(settings.MEDIA_ROOT, 'qrcode')
        os.makedirs(img_dir, exist_ok=True)  # Create the directory if it doesn't exist
        
        # Define the complete path to save the image
        img_path = os.path.join(img_dir, 'default.png')
        
        # Save the QR code image
        img.save(img_path)
        
        Account.objects.create(
            user=instance,
            qr_code=os.path.relpath(img_path, settings.MEDIA_ROOT),
            account_id=random_number
        )

我已更新我的

urls.py
以包含用于提供媒体文件的 URL 模式:

if settings.DEBUG:
    urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

我还更新了我的

settings.py
以包含媒体文件的必要配置:

MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')

from a particular source


0
投票

os.path.join(settings.STATIC_ROOT, 'qrcode') 我认为这将是你的静态路径

您想上传到静态文件夹还是媒体文件夹中?

© www.soinside.com 2019 - 2024. All rights reserved.