In Django Media files are the files uploaded by users on the system. However, like static files media files shouldn't be trusted.
There are always security concerns when dealing with user-uploaded content. Notably, it’s important to validate all uploaded files. Django offers a large degree of flexibility to manage user uploads.
In this article, we will go through the configuration of media files in Django.
Note that I am assuming you have a basic understanding of Django and have a basic project up and running, if not read the below tutorials.
Configuring Media Files in Django
Open settings.py
file of your project and add the following configuration.
# Base url to serve media files MEDIA_URL = '/media/' # Path where media is stored'
MEDIA_ROOT = BASE_DIR / 'media'
# Older versions of Django that use os module for path traversal do this instead
MEDIA_ROOT = os.path.join(BASE_DIR, 'media/')
MEDIA_URL
is the URL that will serve the media files.
During development, it doesn't matter much as long it doesn't conflict with any view of the apps. In production, uploaded files should be served from a different domain such as Amazon S3.
MEDIA_ROOT
is the path to the root directory where the files are getting stored.
Serving Media Files in Development
By default, Django doesn't serve media files during development( when debug=True
).
In order to make the development server serve the media files open the url.py
of the project and make the below changes.
url.py
from django.conf import settings
from django.conf.urls.static import static
urlpatterns = [
path('admin/', admin.site.urls),
...]
if settings.DEBUG:
urlpatterns += static(settings.MEDIA_URL,
document_root=settings.MEDIA_ROOT)
That's all now, run the local development server add files in the media root folder and retrieve them from media URL.