How to upload a file in Django with code example?

In Django, you can upload files using the FileField or ImageField fields in your models, along with the enctype="multipart/form-data" attribute in your HTML form. Here’s a step-by-step guide with a code example on how to upload a file in Django:

Step 1: Create a Model with a FileField: Create a model with a FileField to store the uploaded file:

from django.db import models

class Document(models.Model):
title = models.CharField(max_length=100)
file = models.FileField(upload_to='uploads/')

In this example, the uploaded files will be stored in the uploads/ directory within your media storage.

Step 2: Configure Media Settings: Configure your project’s media settings to specify where uploaded files will be stored:

# settings.py

MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')

Make sure you have MEDIA_URL configured to match your URL routing and MEDIA_ROOT set to the directory where your uploaded files will be saved.

Step 3: Create a Form for File Upload: Create a form to handle the file upload:

from django import forms
from .models import Document

class DocumentForm(forms.ModelForm):
class Meta:
model = Document
fields = ['title', 'file']

Step 4: Create a View for File Upload: Create a view that handles the file upload and rendering the form:

from django.shortcuts import render
from .forms import DocumentForm

def upload_file(request):
if request.method == 'POST':
form = DocumentForm(request.POST, request.FILES)
if form.is_valid():
form.save()
return redirect('success') # Redirect to a success page
else:
form = DocumentForm()
return render(request, 'upload.html', {'form': form})

Step 5: Create a Template for File Upload: Create an HTML template to render the file upload form:

<!-- upload.html -->

<form method="post" enctype="multipart/form-data">
{% csrf_token %}
{{ form.as_p }}
<button type="submit">Upload</button>
</form>

Step 6: Create a URL Pattern: Create a URL pattern to map the view to a URL:

# urls.py

from django.urls import path
from .views import upload_file

urlpatterns = [
path('upload/', upload_file, name='upload_file'),
# ... other URL patterns ...
]

Step 7: Handle Uploaded Files in Templates: To display uploaded files in your templates, you can use the url attribute of the FileField in your model:

<!-- Displaying uploaded file in a template -->

{% for document in documents %}
<p>{{ document.title }}: <a href="{{ document.file.url }}">{{ document.file.name }}</a></p>
{% endfor %}

With these steps, you’ll be able to upload files in Django. Remember to adjust the code according to your project structure and requirements. Additionally, consider implementing proper security measures to handle file uploads securely.