在 Django Rest Framework 中实现 API 以在 cloudinary 中上传和存储图像
简介
我最近与 Cloudinary 合作,我用它来存储我的应用程序的图像。我写这篇文章是为了向你介绍 Cloudinary,并解释如何在 Django rest 框架中实现一个 API,将图像存储到 cloudinary 并返回 Cloudinary 图像 URL。
让我们开始吧
先决条件
您将需要以下知识才能顺利完成本教程:
-
对Python的好理解
-
Django和Django Rest框架知识
-
Postman测试端点的基础知识
-
云账号
什么是Cloudinary?
Cloudinary是一个供开发人员、自由职业者和中小型企业在云中管理、存储和优化网站和移动应用程序的图像和视频并轻松交付它们的平台。
Cloudinary 为用户提供了一个功能齐全的免费计划,如果超出使用限制,该计划稍后会迁移到专业计划。
实现API以将图像存储在云中
第一步
创建一个新文件夹并在其中激活一个虚拟环境

第二步
分别使用pipenv install django、pipenv install djangorestframework和pipenv install cloudinary在您的环境中安装 Django、Djangorestframework 和 cloudinary 库。
第三步
新建一个django项目,进入项目目录新建一个app
$ django-admin startproject common
$ cd common
$ python manage.py startapp index
第四步
在settings.py中添加安装好的app和rest_framework。
INSTALLED_APPS = [
.......
'index',
'rest_framework',
]
第五步
为app创建一个urls.py文件,并将该文件包含在项目urls.py中
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
path('', include('index.urls')),
]
在应用程序的urls.py文件中
from django.urls import path
urlpatterns = [
]
您的文件结构应如下所示

第六步
创建一个Cloudinary帐户并从仪表板获取您的 API 密钥、API 机密和云名称。

在.env文件中添加您的 cloudinary 变量作为环境变量,并在settings.py中导入 cloudinary 和 os 库。
import cloudinary
import os
添加以下代码在settings.py中设置 Cloudinary
cloudinary.config(
cloud_name=os.environ.get("CLOUDINARY_CLOUD_NAME"),
api_key=os.environ.get("CLOUDINARY_API_KEY"),
api_secret=os.environ.get("CLOUDINARY_API_SECRET"),
)
第七步
为models.py中的图像创建模型
from django.db import models
from django.utils import timezone
from cloudinary.models import CloudinaryField
class Image(models.Model):
image = CloudinaryField("image")
timestamp = models.DateTimeField(default=timezone.now)
@property
def image_url(self):
return (
f"https://res.cloudinary.com/dpoix2ilz/{self.image}"
)
我创建了一个模型来存储 Image 和数据库中的 time_created。@property方法用于在上传后从数据库中访问 Cloudinary 图像 URL。cloudinary.com后面的字母是你的 cloudinary 云名称。
第八步
在终端中运行迁移
$ python manage.py makemigrations
$ python manage.py migrate
第九步
为Images创建一个serializer.py文件并添加Image序列化器
from rest_framework import serializers
from .models import Image
class ImageSerializer(serializers.ModelSerializer):
image_url = serializers.ReadOnlyField()
class Meta:
model = Image
fields = ["image_url", "image", "timestamp"]
def to_representation(self, instance):
representation = super().to_representation(instance)
representation.pop("image")
return representation
我为图像_url 创建了一个新字段,并将其设为只读_only。to_representation方法修改序列化程序的响应并删除响应中的图像字段,因为不需要 django 图像 URL。
第十步
在views.py文件中添加以下代码
from rest_framework.generics import CreateAPIView
from rest_framework.parsers import MultiPartParser
from .models import Image
from .serializers import ImageSerializer
class UploadImage(CreateAPIView):
serializer_class = ImageSerializer
parser_classes = (MultiPartParser,)
queryset = Image.objects.all()
parser_classes解析请求并允许文件上传。它用于支持 HTML 表单数据。
第十一步
为urls.py中的视图创建URL路径
from django.urls import path
from .views import UploadImage
urlpatterns = [
path("image/upload", UploadImage.as_view())
]
第十二步
使用命令python manage.py runserver运行您的服务器并以邮递员形式上传图像

从响应中返回了一个图像 URL,将 URL 复制到浏览器中并查看您的图像。

这表明我们的图像已成功存储在我们的 cloudinary 帐户中,并且可以使用 URL 在线查看。
结论
在本文中,我们了解了 cloudinary 以及如何使用 Django rest 框架实现 API 以将图像存储在 cloudinary 中。
所有代码都可以在这个存储库中找到。
快乐编码!
在上与我联系 Linkedin|Twitter|Github
谢谢阅读。如果您觉得有帮助,请不要忘记发送反馈。
更多推荐

所有评论(0)