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()
默认情况下,我的代码将二维码图像保存在当前工作目录中。要将其保存在静态文件夹中,我需要相应地构造路径。我正在使用
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
os.path.join(settings.STATIC_ROOT, 'qrcode') 我认为这将是你的静态路径
您想上传到静态文件夹还是媒体文件夹中?