【问题标题】:How to associate an avatar a user with cloudinary / Django?如何将用户的头像与 cloudinary / Django 相关联?
【发布时间】:2020-01-04 14:37:03
【问题描述】:

我正在尝试在我的 Django 项目上配置 cloudinary。

当前配置会调整用户头像的大小并将其托管在云服务器上。

我想将 is avatar 的公钥与用户的 id 相关联,这样当用户希望更改他的头像时,旧的会被新的覆盖。

我还希望当用户删除他的帐户时,关联的头像要么删除云服务器

我不知道这种将公钥与用户标识符相关联的想法是否是一种好的做法,或者是否有其他方法可以做到这一点?

这是我目前天真地尝试做的事情:

forms.py


class ProfileUpdateForm(forms.ModelForm):
   image = forms.ImageField(label='', required=True, widget=forms.FileInput)
   class Meta:
       model = Profile
       fields = ['image']

views.py

@login_required
def account_edit(request):
   p_form = ProfileUpdateForm(request.POST,
                                   request.FILES,
                                   instance=request.user.profile)

   if request.method == "POST":
       if p_form.is_valid():
           p_form.save()
           messages.success(request, _(f"Your image has been successfully uploaded!"))
           return redirect('account_edit')
       else:
           messages.error(request, _(f"Image files only"))
           return redirect('account_edit')
   else:
       p_form = ProfileUpdateForm(instance=request.user.profile)


models.py

from cloudinary.models import CloudinaryField


class Profile(models.Model):
   user = models.OneToOneField(User, on_delete=models.CASCADE)

   image = CloudinaryField("avatar",
       folder = "avatar/",
       public_id = request.user.pk, # NameError: name 'request' is not defined
       notification_url = "https://dashboard.heroku.com/apps/register-start/avatar",
       resource_type = "image",
       transformation=[
                       {'width': 150, 'height': 150, 'gravity': "center", 'crop': "thumb"},
                       ])

【问题讨论】:

    标签: python django cloudinary


    【解决方案1】:

    如果您希望用户在任何给定时间只有一张个人资料图片(例如 GitHub)而不是多张(例如 Facebook )。

    否则,您可以使用随机生成的 public_id(这是不传递 public_id 参数时的默认值),并使用相关的 User 主键标记图像。

    当该人删除他们的帐户时,您需要使用Upload API's destroy method删除 Cloudinary 中的图像:

    cloudinary.uploader.destroy(public_id, **options)
    

    【讨论】:

      猜你喜欢
      • 2013-08-09
      • 2013-12-10
      • 2015-03-27
      • 2021-12-23
      • 1970-01-01
      • 2020-05-21
      • 2014-09-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多