Django로 Bunny.net에 미디어 파일 저장하기

9813 단어 django
Bunny.net은 빠르고 안정적인 CDN입니다. 다음 Django 프로젝트에서 Bunny.net을 설정하고 사용하는 방법을 보여 드리겠습니다.

Bunny.net 설정



bunny.net로 이동하여 로그인하십시오. 스토리지 아이콘을 클릭한 다음 스토리지 영역 추가를 클릭합니다. 저장 영역에 이름을 지정하고 필요에 가장 적합한 지리적 위치를 선택하십시오. 이 가이드에서는 뉴욕 위치에 있는 내 영역myzone을 호출하겠습니다.

생성되면 해당 영역의 파일 관리자로 리디렉션됩니다. 오른쪽 상단의 Connect Pull Zone 버튼을 클릭합니다. 다시 한 번, 이름을 지정하고(저는 영역 이름을 일관되게 유지하는 것을 좋아합니다) CDN 요구 사항에 가장 적합한 옵션을 선택합니다.

장고 설정



우리는 당신이 이미 최소한의 새 django 프로젝트를 만들고 설정했다고 가정합니다.

먼저 settings.py를 편집하고 몇 가지 새로운 속성을 포함합니다. bunny.net의 저장소에서 FTP 및 API 액세스를 클릭합니다. 페이지에 있는 사용자 이름과 비밀번호를 복사하여 설정에 속성으로 저장합니다.

또한 기본 파일 저장소를 BunnyStorage 클래스(아래에서 생성할 것)로 설정하고 미디어 URL을 우리가 생성한 각 풀 존의 것으로 변경했습니다.

# Media files
#

DEFAULT_FILE_STORAGE = 'myapp.storage.BunnyStorage'

MEDIA_URL = 'https://myzone.b-cdn.net/myzone/media/'


# Bunny.net CDN Access
#

BUNNY_ZONENAME = 'myzone'

BUNNY_PASSWORD = 'arandom-string-of-numbersand-letters'


2021년 2월 현재 Bunny.net에는 공식 Python API가 없습니다. 그러나 안정적인 라이브러리로 링크NiveditJain's 라이브러리를 수행합니다. 단일 파일이므로 django 프로젝트 폴더(manage.py가 저장된 위치)에 파일을 넣고wget 사용자 지정 스토리지 모듈에 상대적으로 가져옵니다.

cd myproject

wget https://raw.githubusercontent.com/NiveditJain/BunnyCDNStorageLib/master/BunnyCDNStorage.py


중요한!



계속하기 전에 BunnyCDNStorage.py 파일을 편집해야 합니다! upload_file 메서드를 아래와 같이 변경합니다.

def upload_file(self,cdn_path,file_name,file_data):
        """
            uploads your files to cdn server \n
            cdn_path - directory to save in CDN \n
            filename - name to save with cdn \n
            if none it will look for file in present working directory
        """

        if(cdn_path[-1]=='/'):
            cdn_path=cdn_path[:-1]

        request_url=self.base_url+cdn_path+'/'+file_name

        response=requests.request("PUT",request_url,data=file_data,headers=self.headers)

        return(response.json())


완료되면 저장소 백엔드를 연결하려는 django 앱으로 디렉터리를 변경하고 새 파일을 만듭니다storage.py.

djangodocs는 사용자 지정 스토리지 백엔드 작성에 대한 심층 문서를 제공합니다. 따라서 우리가 하는 일에 대해 더 깊이 이해하려면 해당 페이지를 확인해야 합니다.

우리의 스토리지 백엔드는 단일 클래스와 5가지 메소드로 구성됩니다.
myapp/storage.py에서,

from django.conf import settings
from django.core.files.images import ImageFile
from django.core.files.storage import Storage

import BunnyCDNStorage


class BunnyStorage(Storage):
    def __init__(self):
        self.conn = BunnyCDNStorage.CDNConnector(
            settings.BUNNY_PASSWORD,
            settings.BUNNY_ZONENAME,
            storage_zone_region='ny'
        )

    def _open(self, name, mode='rb'):
        f = self.conn.get_file(name)

        return ImageFile(f)

    def _save(self, name, content):
        self.conn.upload_file('/media/', name, content)

        return name

    def delete(self, name):
        self.conn.remove(name)

    def exists(self, name):
        try:
            self.conn.get_file(name)
        except ValueError:
            return False

        return True

    def listdir(self, path):
        pass

    def size(self, name):
        pass

    def url(self, name):
        return f'https://myzone.b-cdn.net/media/{name}'



그리고 그게 다야! Bunny.net이 공식 Python API를 출시하고 표준 Django 패키지가 출시될 때까지 이것은 현재 우리가 얻은 것 중 최고입니다... 즐거운 코딩!

좋은 웹페이지 즐겨찾기