MEDIA_ROOT i przesyłanie plików
Przyjmowanie i przechowywanie plików przesłanych przez użytkowników
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. 📁
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
- STATICFILES i znacznik static
- collectstatic na produkcji
- MEDIA_ROOT i przesyłanie plików
- ImageField i udostępnianie przesłanych plików