Django Framework ile Dosya Yükleme ve İndirme


Django Framework ile Dosya Yükleme ve İndirme

Django, güçlü yapısı ve modüler mimarisi ile web uygulama geliştirme süreçlerinde öne çıkan bir Python framework’üdür. Django framework ile dosya yükleme (file upload) ve indirme (file download) işlemleri, birçok projede ihtiyaç duyulan temel fonksiyonlardandır. Bu makalede, Django'da dosya yükleme ve indirme işlemlerinin nasıl kolayca ve güvenli biçimde gerçekleştirileceğine dair hem teknik detaylara hem de uygulama örneklerine yer vereceğiz.

Django'da Dosya Yükleme Adımları

Django framework ile dosya yükleyebilmek için öncelikle model, form ve view yapılarını uygun şekilde hazır hale getirmek gerekir. Modelinizde bir FileField veya ImageField tanımlayarak başlayabilirsiniz. Ardından, ilgili formu oluşturup, view fonksiyonunu ile dosyaların kaydedilmesini sağlamalısınız.

Model ile Dosya Alanı Oluşturma

from django.db import models

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

    def __str__(self):
        return self.title

Form ile Dosya Yükleme Alanı

from django import forms
from .models import Document

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

View ile Dosya Kayıt İşlemi

from django.shortcuts import render, redirect
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')
    else:
        form = DocumentForm()
    return render(request, 'upload.html', {'form': form})

HTML'de Dosya Yükleme Formu

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

Django'da Dosya İndirme Nasıl Yapılır?

Django framework ile dosya indirme işlemi için genellikle bir view fonksiyonu ve FileResponse veya HttpResponse kullanılır. Kullanıcıya ilgili dosyanın indirilmesi için doğrudan bir bağlantı sunulabilir. Bu işlemlerde dosya yolları ve erişim izinlerine dikkat etmek önemlidir.

Basit Bir Dosya İndirme View'i

from django.http import FileResponse, Http404
import os
from django.conf import settings

def download_file(request, filename):
    file_path = os.path.join(settings.MEDIA_ROOT, 'uploads', filename)
    if os.path.exists(file_path):
        return FileResponse(open(file_path, 'rb'), as_attachment=True, filename=filename)
    else:
        raise Http404("Dosya bulunamadı.")

Dosya İndirme Bağlantısı Verme (HTML)

<a href="/download/filename.txt">Dosyayı İndir</a>

Sonuç

Django framework ile dosya yükleme ve indirme işlemleri modern web uygulamalarında vazgeçilmezdir. Hem model, form hem de view katmanlarında yapılan küçük ayarlamalarla hızlı ve güvenli bir dosya yönetim sistemi oluşturabilirsiniz. Django'nun sunduğu FileField, FileResponse gibi özellikler ile yükleme ve indirme işlemlerini esnek ve profesyonel biçimde yönetebilirsiniz.