使用 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://#/o/oauth2/auth",
  "token_uri": "https://#/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://:8000/upload/`(或您在Django應用程式中指定的URL)以訪問圖片上傳頁面。

使用提供的表單上傳圖片並提交。如果一切設定正確,您應該會看到一條成功訊息,指示圖片已成功上傳。此外,圖片應儲存在您的Firebase儲存儲存桶中。

就是這樣,我們已經成功使用Django和Firebase上傳了圖片。

總結

在本教程中,我們學習瞭如何將Django與Firebase整合以在Web應用程式中啟用圖片上傳。透過結合使用Django的功能和Firebase儲存,我們建立了一個分步指南來設定Firebase,將Django配置為與Firebase整合,並實現圖片上傳功能。我們提供了程式碼示例和說明來在本地測試該功能。現在,您掌握了使用Firebase在Django專案中無縫上傳圖片的知識。

更新於:2023年7月26日

瀏覽量 699

啟動您的 職業生涯

透過完成課程獲得認證

開始
廣告

© . All rights reserved.