2 votes

Comment enregistrer des fichiers dans une base de données dans django ?

J'essaie de télécharger des fichiers en utilisant les formulaires de Django et de sauvegarder ces fichiers dans la base de données elle-même. J'ai pu enregistrer le lien du fichier dans la base de données et enregistrer le fichier lui-même dans un répertoire que j'ai spécifié dans Media_root. Pouvez-vous m'aider et me dire ce que je peux changer dans mon code pour que les fichiers soient enregistrés dans la base de données.

Voici mon code :

models.py

from django.db import models

class Document(models.Model):
    docfile = models.FileField(upload_to='documents/%Y/%m/%d')

forms.py

from django import forms

class DocumentForm(forms.Form):
    docfile = forms.FileField(
        label='Select a file',
    )

vues.py

from django.shortcuts import render_to_response
from django.template import RequestContext
from django.http import HttpResponseRedirect
from django.core.urlresolvers import reverse
from .models import Document
from .forms import DocumentForm

def list(request):
    # Handle file upload
    if request.method == 'POST':
        form = DocumentForm(request.POST, request.FILES)
        if form.is_valid():
            newdoc = Document(docfile = request.FILES['docfile'])
            newdoc.save()

            # Redirect to the document list after POST
            return HttpResponseRedirect(reverse('upload.views.list'))
    else:
        form = DocumentForm() # A empty, unbound form

    # Load documents for the list page
    documents = Document.objects.all()

    # Render list page with the documents and the form
    return render_to_response(
    'list.html',
    {'documents': documents, 'form': form},
    context_instance=RequestContext(request)
    )

def index(request):
    return render_to_response('index.html')

application \urls.py

from django.conf.urls import patterns, include, url
from django.conf import settings
from django.conf.urls.static import static
from django.views.generic import RedirectView
from django.contrib import admin
# admin.autodiscover()

urlpatterns = patterns('',
        (r'^upload/', include('upload.urls')),
        (r'^$', 'upload.views.index'),
        (r'^admin/', include(admin.site.urls)),) + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

projet \urls.py

from django.conf.urls import patterns, include, url

urlpatterns = patterns('upload.views',
    url(r'^$', 'list', name='list'),
    url(r'^list/$', 'list', name='list'),)

4voto

Kos Points 29125

Django fournit Champ binaire qui vous permet de stocker n'importe quelle donnée binaire, y compris le contenu des fichiers.

Veuillez noter que la documentation indique également :

Bien que vous puissiez penser à stocker des fichiers dans la base de données, considérez que c'est une mauvaise conception dans 99% des cas. Ce champ ne remplace pas une gestion correcte des fichiers statiques.

Si vous préférez ne pas stocker les fichiers sur le système de fichiers de votre serveur web, vous pouvez explorer d'autres options comme Amazon S3 ou simplement un serveur FTP. Jetez un coup d'œil au django-storages elle offre un bon nombre d'options.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X