django将网络中的图片,保存成model中的ImageField

有这样的情形,django个人头像在model中是:

class UserProfile(AbstractUser):
    """
    用户
    """
    name = models.CharField(max_length=30, null=True, blank=True, verbose_name="姓名")
    image = models.ImageField(max_length=1000,upload_to='avatar/%Y/%m/', verbose_name=u'头像', null=True, blank=True)

正常情况下,需要客户端(app或者浏览器post上来图片,然后保存到image中)

例如:

image = request.data.get('image', None)
...
user.image=image
user.save()

但是,有这样的情况,如果是第三方,例如微博登录,前端通过微博接口获取到微博头像,post上来的就是头像的地址,https://xxx.xxx.jpg

这个时候如何通过图片url,保存到django的model中呢?

思路是,先通过url下载图片,然后保存

from django.core.files import File
from io import BytesIO
from urllib.request import urlopen

url = request.data.get('image', None)
r = urlopen(url)
io = BytesIO(r.read())
user.image.save("{}_{}.jpg".format(user.id,int(time.time())), File(io))

 

Django 保存图片可以通过使用 ImageField 字段来实现。你需要在你的 models.py 文件定义一个 ImageField 字段,并在视图处理上传的图片并将其保存到该字段。 以下是一个简单的例子: ```python from django.db import models class MyModel(models.Model): name = models.CharField(max_length=100) image = models.ImageField(upload_to='images/') def __str__(self): return self.name ``` 在这个例子,我们定义了一个名为 MyModel 的模型,并在其添加了一个名为 imageImageField 字段。`upload_to` 参数指定图片上传后应该存储在哪个文件夹。 接下来,在视图处理上传的图片并将其保存到该字段。以下是一个简单的视图函数: ```python from django.shortcuts import render from django.http import HttpResponseRedirect from .models import MyModel def my_view(request): if request.method == 'POST': name = request.POST['name'] image = request.FILES['image'] my_model = MyModel(name=name, image=image) my_model.save() return HttpResponseRedirect('/success/') return render(request, 'my_template.html') ``` 在这个视图函数,我们处理了 POST 请求,将上传的图片保存到 MyModel 对象,并将其保存到数据库。 最后,我们需要在模板创建一个表单,允许用户上传图片。以下是一个简单的模板: ```html <form method="post" enctype="multipart/form-data"> {% csrf_token %} <label for="name">Name:</label> <input type="text" name="name" id="name"> <label for="image">Image:</label> <input type="file" name="image" id="image"> <input type="submit" value="Submit"> </form> ``` 在这个模板,我们创建了一个表单,允许用户上传图片。当用户提交表单时,它将发送一个 POST 请求,并将图片和名称一起发送到服务器。服务器将处理上传的图片并将其保存到数据库
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值