简介

我最近与 Cloudinary 合作,我用它来存储我的应用程序的图像。我写这篇文章是为了向你介绍 Cloudinary,并解释如何在 Django rest 框架中实现一个 API,将图像存储到 cloudinary 并返回 Cloudinary 图像 URL。

让我们开始吧

先决条件

您将需要以下知识才能顺利完成本教程:

  • 对Python的好理解

  • Django和Django Rest框架知识

  • Postman测试端点的基础知识

  • 云账号

什么是Cloudinary?

Cloudinary是一个供开发人员、自由职业者和中小型企业在云中管理、存储和优化网站和移动应用程序的图像和视频并轻松交付它们的平台。

Cloudinary 为用户提供了一个功能齐全的免费计划,如果超出使用限制,该计划稍后会迁移到专业计划。

实现API以将图像存储在云中

第一步

创建一个新文件夹并在其中激活一个虚拟环境

cloud1.png

第二步

分别使用pipenv install djangopipenv install djangorestframeworkpipenv 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 = [

]

您的文件结构应如下所示

cloud3.png

第六步

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

cloud2.png

.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运行您的服务器并以邮递员形式上传图像

cloud4.png

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

cloud5.png

这表明我们的图像已成功存储在我们的 cloudinary 帐户中,并且可以使用 URL 在线查看。

结论

在本文中,我们了解了 cloudinary 以及如何使用 Django rest 框架实现 API 以将图像存储在 cloudinary 中。

所有代码都可以在这个存储库中找到。

快乐编码!

在上与我联系 Linkedin|Twitter|Github

谢谢阅读。如果您觉得有帮助,请不要忘记发送反馈。

Logo

Python社区为您提供最前沿的新闻资讯和知识内容

更多推荐