使用 Django 和 Firebase 上传图片


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://127.0.0.1/o/oauth2/auth",
  "token_uri": "https://127.0.0.1/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存储集成,我们需要安装一些提供必要功能的附加软件包。在您的终端或命令提示符中,确保您位于项目目录中,然后运行以下命令以安装必要的软件包

$ pip install django-storages google-cloud-storage

此命令将安装“django−storages”软件包(充当Django的存储后端)和“google−cloud−storage”软件包(允许Django与Firebase存储交互)。

现在我们已经安装了所需的软件包,打开位于`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存储作为默认的文件存储后端。

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

# Firebase configuration
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存储启用图片上传的过程

首先,我们需要创建一个Django模型,该模型将图片数据存储在我们的数据库中。打开Django应用程序主目录(与`settings.py`相同的目录)中的`models.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存储作为存储后端,请打开`settings.py`文件并添加以下代码

# Add these lines at the top of settings.py
import firebase_admin
from firebase_admin import storage

# ... (existing code)

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

# Configure the storage bucket
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)

        # Set the image URL in the model instance
        instance.image = blob.public_url

        if commit:
            instance.save()
        return instance

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

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

$ python manage.py runserver

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

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

就是这样,我们已经成功使用Django和Firebase上传了图片。

总结

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

更新于:2023年7月26日

浏览量 699

启动您的 职业生涯

通过完成课程获得认证

开始
广告