使用 Django 和 Firebase 上传图片

pythondjangoprogramming

Python 简单易用,已成为最流行的 Web 开发编程语言之一。在众多可用于 Python 的框架中,Django 是构建 Web 应用程序的强大而高效的选择。此外,Firebase 是一个全面的移动和 Web 开发平台,提供广泛的服务来增强应用程序功能。在本教程中,我们将探索 Django 与 Firebase 的集成,以便在我们的 Web 应用程序中实现无缝的图片上传功能。

在本文中,我们将指导您完成将 Django 与基于云的存储解决方案 Firebase 集成的过程。通过利用 Firebase Storage 的功能,我们可以轻松地在 Django 应用程序中存储和管理用户上传的图片。我们将逐步探索此集成的实现,让您能够同时使用 Django 和 Firebase。

设置 Firebase

在本节中,我们将介绍为我们的 Django 项目设置 Firebase 的过程。

首先,我们需要创建一个 Firebase 项目。前往 Firebase 网站 (firebase.google.com) 并使用您的 Google 帐户登录。登录后,您将看到"添加项目"选项。单击它并为您的项目提供名称。例如,我们将其命名为"Django Firebase 图像上传"。

在 Firebase 控制台中,找到您新创建的项目并导航到"存储"部分。在这里,您可以通过单击"开始"按钮为您的项目启用 Firebase 存储。这将设置必要的基础架构,以安全地存储和管理您上传的图像。

要将 Firebase 与 Django 集成,我们需要生成凭据,以允许我们的 Django 应用程序与 Firebase 服务交互。在 Firebase 控制台中,单击"设置"图标(齿轮图标),然后选择"项目设置"。然后,转到"服务帐户"选项卡。

在"Firebase Admin SDK"部分下,单击"生成新私钥"按钮。这将生成一个包含您的 Firebase 凭据的 JSON 文件。下载 JSON 文件并将其保存在安全的位置。

这就是设置 Firebase 的全部内容!以下是生成的 Firebase 凭据 JSON 文件的示例:

{
  "type": "service_account",
  "project_id": "your-project-id",
  "private_key_id": "your-private-key-id",
  "private_key": "-----BEGIN PRIVATE KEY-----\nYourPrivateKeyHere\n-----END PRIVATE KEY-----\n",
  "client_email": "your-client-email",
  "client_id": "your-client-id",
  "auth_uri": "https://accounts.google.com/o/oauth2/auth",
  "token_uri": "https://accounts.google.com/o/oauth2/token",
  "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
  "client_x509_cert_url": "https://www.googleapis.com/.../your-project-id-.../your-project-id-...."
}

请记住将"your-project-id"、"your-private-key-id"、"your-client-email"和其他占位符替换为您的实际 Firebase 凭据。

设置 Django 项目

在本节中,我们将介绍设置 Django 项目并将其配置为与 Firebase 集成所需的步骤。首先,让我们为图像上传应用程序创建一个新的 Django 项目。

打开终端或命令提示符并导航到要创建项目的目录。然后,运行以下命令:

$ django-admin startproject image_upload_app

这将在您选择的目录中创建一个名为"image_upload_app"的新 Django 项目。接下来,使用 `cd` 命令导航到项目目录:

$ cd image_upload_app

要将 Django 与 Firebase Storage 集成,我们需要安装一些提供所需功能的附加软件包。在终端或命令提示符中,确保您位于项目目录中,然后运行以下命令安装必要的软件包:

$ pip install django-storages google-cloud-storage

此命令将安装"django-storages"包(用作 Django 的存储后端)和"google-cloud-storage"包(允许 Django 与 Firebase Storage 交互)。

现在我们已经安装了所需的软件包,打开位于"image_upload_app"目录中的"settings.py"文件。

首先,通过在"settings.py"文件顶部添加以下几行来导入必要的模块:

import os
from google.oauth2 import service_account

接下来,向下滚动到 `STATIC_URL` 设置并在其下方添加以下行:

DEFAULT_FILE_STORAGE = 'storages.backends.gcloud.GoogleCloudStorage'

此行将 Django 配置为使用"django−storages"包提供的 Google Cloud Storage 作为默认文件存储后端。

现在,我们需要配置 Firebase 凭据。在 `settings.py` 中找到 `DATABASES` 设置并在其下方添加以下行:

# Firebase 配置
FIREBASE_CREDENTIALS = service_account.Credentials.from_service_account_file(
    os.path.join(BASE_DIR, 'path/to/firebase_credentials.json')
)

确保将"path/to/firebase_credentials.json"替换为您之前下载的 Firebase 凭据 JSON 文件的实际路径。

创建图片上传功能

在本节中,我们将引导您完成创建必要组件的过程,以便使用 Django 和 Firebase Storage 实现图片上传

首先,我们需要创建一个 Django 模型,将图片数据存储在我们的数据库中。打开 Django 应用程序主目录中的"models.py"文件(与"settings.py"相同的目录)。

from django.db import models

class UploadedImage(models.Model):
    image = models.ImageField(upload_to='images/')
    created_at = models.DateTimeField(auto_now_add=True)

    def __str__(self):
        return self.image.name

在上面的代码中,我们定义了一个名为 `UploadedImage` 的模型,它有两个字段:`image`,用于存储上传图像的 `ImageField`,以及 `created_at`,用于自动记录创建日期和时间的 `DateTimeField`。`upload_to` 参数指定上传图像的存储目录。

接下来,我们需要设置一个处理图像上传过程的 Django 视图。打开应用程序主目录中的 `views.py` 文件并添加以下代码:

from django.shortcuts import render, redirect
from .forms import ImageUploadForm

def upload_image(request):
    if request.method == 'POST':
        form = ImageUploadForm(request.POST, request.FILES)
        if form.is_valid():
            form.save()
            return redirect('upload_success')
    else:
        form = ImageUploadForm()
    return render(request, 'upload_image.html', {'form': form})

在上面的代码中,我们定义了一个名为"upload_image"的视图函数,用于处理 GET 和 POST 请求。当通过 POST 提交表单时,我们使用"is_valid()"方法验证表单数据,使用"save()"方法保存上传的图像,并将用户重定向到成功页面。如果请求方法是 GET,我们将创建 `ImageUploadForm` 表单的实例并使用 `upload_image.html` 模板呈现它。

要将 Django 配置为使用 Firebase Storage 作为存储后端,请打开 `settings.py` 文件并添加以下代码:

# 在 settings.py 顶部添加以下行
import firebase_admin
from firebase_admin import storage

# ... (现有代码)

# 初始化 Firebase
firebase_admin.initialize_app(options={
    'storageBucket': 'your-firebase-storage-bucket.appspot.com',
}, name='image_upload_app')

# 配置存储桶
FIREBASE_BUCKET = storage.bucket(app=firebase_admin.get_app(name='image_upload_app'))

将 `'your−firebase−storage−bucket.appspot.com'` 替换为您的 Firebase 存储桶的名称。此代码使用提供的选项初始化 Firebase 并配置存储桶。

现在,让我们实现处理图像上传和存储的逻辑。在应用程序的主目录中创建一个名为 `forms.py` 的新文件并添加以下代码:

from django import forms
from .models import UploadedImage
from .settings import FIREBASE_BUCKET

class ImageUploadForm(forms.ModelForm):
    class Meta:
        model = UploadedImage
        fields = ('image',)

    def save(self, commit=True):
        instance = super().save(commit=False)
        image = self.cleaned_data['image']

        # Upload the

 image to Firebase Storage
        blob = FIREBASE_BUCKET.blob(image.name)
        blob.upload_from_file(image.file, content_type=image.content_type)

        # 在模型实例中设置图像 URL
        instance.image = blob.public_url

        if commit:
            instance.save()
        return instance

在上面的代码中,我们定义了一个基于 `UploadedImage` 模型的表单类 `ImageUploadForm`。`save()` 方法被重写以处理图像上传和存储。在 `save()` 方法中,我们在 Firebase Storage 存储桶中创建一个 blob(类似文件的对象),其名称与上传的图像相同。然后,​​我们使用 `upload_from_file()` 方法将图像文件上传到 Firebase Storage。最后,我们在模型实例中设置上传图像的公共 URL 并保存它。

要在本地测试图像上传功能,我们可以运行 Django 开发服务器并通过 Web 浏览器与应用程序交互。在终端或命令提示符中,导航到项目的主目录(`manage.py` 所在的位置)并运行以下命令:

$ python manage.py runserver

这将启动开发服务器,您应该看到输出表明服务器正在运行。打开您的 Web 浏览器并访问 `http://localhost:8000/upload/`(或您在 Django 应用程序中指定的 URL)以访问图像上传页面。

使用提供的表单上传图像并提交。如果一切设置正确,您应该会看到一条成功消息,表明图像已成功上传。此外,图像应存储在您的 Firebase 存储桶中。

就这样,我们已成功使用 Django 和 Firebase 上传图像。

结论

在本教程中,我们学习了如何将 Django 与 Firebase 集成以在 Web 应用程序中启用图像上传。通过使用 Django 的 Firebase 存储功能,我们创建了一个分步指南来设置 Firebase、配置 Django 以进行 Firebase 集成以及实现图像上传功能。我们提供了代码示例和说明以在本地测试该功能。现在,您已经掌握了使用 Firebase 在 Django 项目中无缝上传图像的知识。


相关文章