Django Tutorial
Django Create A Complete Project
Django Template
Django Database Query
Django Form
Django Authentication and Permission Management
Django unittest
Django Advanced
In this tutorial, we will cover how to handle file uploads and generate a CSV file for download in a Django web application.
Prerequisites:
Step 1: Create a file upload form
1.1. Create a new file named forms.py
in your Django app folder, and define a FileUploadForm
class:
from django import forms class FileUploadForm(forms.Form): file = forms.FileField()
Step 2: Create a view to handle file upload and CSV file generation
2.1. In your app's views.py
, import the necessary modules and create a view function to handle file upload and CSV file generation:
import csv from django.http import HttpResponse, HttpResponseRedirect from django.shortcuts import render from .forms import FileUploadForm def upload_file(request): if request.method == 'POST': form = FileUploadForm(request.POST, request.FILES) if form.is_valid(): # Process the uploaded file uploaded_file = request.FILES['file'] # Create the CSV file for download response = HttpResponse(content_type='text/csv') response['Content-Disposition'] = 'attachment; filename="generated.csv"' writer = csv.writer(response) writer.writerow(['Row', 'Value']) # Process the uploaded file and write to the CSV file for i, line in enumerate(uploaded_file, start=1): writer.writerow([i, line.decode('utf-8').strip()]) return response else: form = FileUploadForm() return render(request, 'myapp/upload_file.html', {'form': form})
Step 3: Create a template for the file upload form
3.1. Create a new template file upload_file.html
in your app's templates folder:
{% extends "base.html" %} {% block content %} <h2>Upload a file and generate a CSV file</h2> <form method="post" enctype="multipart/form-data"> {% csrf_token %} {{ form.as_p }} <button type="submit">Upload and Generate CSV</button> </form> {% endblock %}
Step 4: Add URL patterns
4.1. In your app's urls.py
, add a new URL pattern for the upload_file
view:
from django.urls import path from . import views app_name = 'myapp' urlpatterns = [ # Other URL patterns... path('upload_file/', views.upload_file, name='upload_file'), ]
Step 5: Test file upload and CSV file download
5.1. Run your Django development server:
python manage.py runserver
5.2. Visit the URL corresponding to the upload_file
view (e.g., http://127.0.0.1:8000/myapp/upload_file/
) and upload a text file. The server will generate a CSV file based on the uploaded file and prompt you to download it.
How to handle file uploads in Django:
Description: Django provides mechanisms for handling file uploads, allowing users to submit files through forms and saving them to the server.
Code Example:
# forms.py from django import forms class UploadFileForm(forms.Form): file = forms.FileField()
# views.py from django.shortcuts import render from .forms import UploadFileForm def handle_uploaded_file(file): with open('uploads/' + file.name, 'wb+') as destination: for chunk in file.chunks(): destination.write(chunk) def upload_file(request): if request.method == 'POST': form = UploadFileForm(request.POST, request.FILES) if form.is_valid(): handle_uploaded_file(request.FILES['file']) return render(request, 'upload_success.html') else: form = UploadFileForm() return render(request, 'upload.html', {'form': form})
FileField and ImageField in Django models:
FileField
and ImageField
in Django models to handle file and image uploads.from django.db import models class MyModel(models.Model): file = models.FileField(upload_to='uploads/') image = models.ImageField(upload_to='images/')
CSV file handling in Django views:
# views.py import csv from django.shortcuts import render def handle_uploaded_csv(file): # Parse and process CSV file with file.open() as csvfile: reader = csv.reader(csvfile) for row in reader: # Your CSV processing logic here def upload_csv(request): if request.method == 'POST': form = UploadFileForm(request.POST, request.FILES) if form.is_valid(): handle_uploaded_csv(request.FILES['file']) return render(request, 'upload_success.html') else: form = UploadFileForm() return render(request, 'upload.html', {'form': form})
Django file upload and storage configuration:
# settings.py MEDIA_ROOT = 'media/' MEDIA_URL = '/media/'
Django model forms for file uploads:
# forms.py from django import forms from .models import MyModel class MyModelForm(forms.ModelForm): class Meta: model = MyModel fields = ['file', 'image']
Creating CSV views in Django:
# views.py import csv from django.http import HttpResponse def generate_csv(request): response = HttpResponse(content_type='text/csv') response['Content-Disposition'] = 'attachment; filename="my_data.csv"' writer = csv.writer(response) writer.writerow(['Column 1', 'Column 2', 'Column 3']) writer.writerow(['Data 1', 'Data 2', 'Data 3']) return response