Django 创建二维码(Segno)并保存到 S3

Django create QR code (Segno) and save to S3

我正在寻求在完成用户配置文件创建表单后创建 QR 码,并将 QR 图像保存到 FileField。 FileField 还用于已将图像从表单保存到 S3 的 profile_image 字段。我想对 QR 码做同样的事情(保存到 S3 存储桶)。

使用 Segno 我可以生成二维码。我怎样才能创建它的图像并通过 models.py FileField 将其保存到 S3?

我的 models.py 和 views.py 文件的代码如下。感谢任何帮助。

models.py

class Profile(models.Model):
    def profile_path(instance, filename):
        return 'profile/{0}/{1}'.format(instance.profile_unique, filename)

    def qrcode_path(instance, filename):
        return 'profile/{0}/{1}'.format(instance.profile_unique, filename)
    #unique profile identification (alphanumeric string to be used on path for qrcode and profile image)
    profile_unique = models.CharField(max_length=50, default=0)
    #profile image filefield
    profile_image = models.FileField(upload_to=profile_path, default='')
    #qr code filefield
    qr_code = models.FileField(upload_to=qrcode_path, default='')

views.py

def add_profile(request):
    user = request.user
    userprofile = user.userprofile

    form = ProfileForm(request.POST or None, request.FILES or None)

    if form.is_valid():
        profile = form.save(commit=False)
        profile.profile_user_id = user.id
        profile.profile_unique = get_random_string(8)
        #segno
        qr = segno.make_qr('test')
        qr.save('example.png', scale=4)

        profile.qr_code = qr
        profile.save()

设法找到答案,为了任何需要它的人的利益,我将其包含在下面:

#qr code
import io
import segno
from django.core.files.base import ContentFile

#qr code
out = io.BytesIO()
qr = segno.make('test')
qr.save(out, kind='png', dark='#000000', light=None, scale=3)

filename = 'qr-'+profile.profile_unique+'.png'
profile.qr_code.save(filename, ContentFile(out.getvalue()), save=False)
profile.save()