Django Academy · Lekcja

MEDIA_ROOT i przesyłanie plików

Przyjmowanie i przechowywanie plików przesłanych przez użytkowników

Lekcja 3 z 413 kroki

MEDIA_ROOT i przesyłanie plików to bezpłatna lekcja Django Academy na CoddyKit. To lekcja 3 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Django Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Django Academy zawiera 4 lekcji w sumie.

Pliki statyczne a pliki multimedialne

Pliki statyczne są dostarczane razem z kodem. Pliki multimedialne są przesyłane przez użytkowników podczas działania aplikacji — na przykład awatary lub dokumenty — i potrzebują własnego miejsca.

Ustawienie MEDIA_ROOT

MEDIA_ROOT to bezwzględna ścieżka folderu na dysku, w którym Django zapisuje wszystkie przesłane pliki. Znajduje się poza drzewem kodu źródłowego.

MEDIA_ROOT = BASE_DIR / 'media'

Ustawienie MEDIA_URL

MEDIA_URL to publiczny prefiks, którego przeglądarki używają do żądania przesłanego pliku, podobnie jak STATIC_URL w przypadku zasobów statycznych.

MEDIA_URL = '/media/'

Dodaj FileField

Aby akceptować przesyłane pliki, dodaj do modelu pole FileField. Django zapisuje plik na dysku, a w bazie danych przechowuje tylko jego ścieżkę.

class Resume(models.Model):
    doc = models.FileField(upload_to='resumes/')

Ścieżka upload_to

Argument upload_to określa podfolder w MEDIA_ROOT. Użyj go, aby uporządkować przesyłane pliki, na przykład grupując wszystkie CV w jednym miejscu.

Dynamiczne upload_to

Przekaż do upload_to funkcję, gdy ścieżka powinna zależeć od instancji, na przykład gdy pliki mają być umieszczane w osobnych folderach użytkowników.

def user_dir(instance, filename):
    return f'user_{instance.user.id}/{filename}'

Formularze wymagają enctype

Formularz HTML przesyłający pliki musi ustawiać enctype na multipart/form-data, w przeciwnym razie przeglądarka nie wyśle żadnych bajtów pliku.

<form method="post" enctype="multipart/form-data">

Odczytaj request.FILES

Przesyłane bajty nie trafiają do request.POST. Znajdują się w request.FILES, które przekazujesz do formularza, aby je powiązać.

form = ResumeForm(request.POST, request.FILES)

Pobierz adres URL

Po zapisaniu każde pole pliku udostępnia właściwość .url, która tworzy odnośnik z MEDIA_URL do umieszczenia w szablonie.

<a href="{{ resume.doc.url }}">Download</a>

Weryfikuj przesyłane pliki

Nigdy nie ufaj surowym plikom. Ogranicz rozmiar i typ pliku w metodzie clean formularza, aby nie dopuścić do aplikacji złośliwych plików. 🔒

Chroń pliki multimedialne

MEDIA_ROOT powinien znajdować się poza repozytorium i nigdy nie powinien być obsługiwany przez collectstatic. Pliki użytkowników i kod pozostają wtedy wyraźnie oddzielone.

Szybkie sprawdzenie

Sprawdźmy, gdzie dane przesłanego pliku trafiają w widoku.

Podsumowanie

Dowiedział(a) się Pan/Pani, że MEDIA_ROOT przechowuje pliki przesłane przez użytkowników, że FileField wraz z upload_to je porządkuje oraz że request.FILES zawiera ich bajty. 📁

Bezpłatny start

Ucz się Python dzięki korepetycjom AI — za darmo

Pisz i uruchamiaj kod w przeglądarce, otrzymuj natychmiastową pomoc od korepetytora AI dostępnego 24/7 i kontynuuj naukę w sieci lub w aplikacji.

Kursy
30
Lekcje
120

Często zadawane pytania

Czy lekcja „MEDIA_ROOT i przesyłanie plików” jest bezpłatna?

Tak — pełny tekst „MEDIA_ROOT i przesyłanie plików” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Django Academy, przejdź na CoddyKit PRO. Kurs Django Academy zawiera 4 lekcji w sumie.

Co nauczysz się w „MEDIA_ROOT i przesyłanie plików”?

Przyjmowanie i przechowywanie plików przesłanych przez użytkowników Ćwiczysz Django Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć Django Academy?

Nie wymagamy żadnego doświadczenia. Django Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 3 z 4.

Ile czasu zajmuje lekcja „MEDIA_ROOT i przesyłanie plików”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji Django Academy?

Tak. Każda lekcja Django Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. STATICFILES i znacznik static
  2. collectstatic na produkcji
  3. MEDIA_ROOT i przesyłanie plików
  4. ImageField i udostępnianie przesłanych plików
← Powrót do Django Academy