GOOGLE ADS

Mittwoch, 13. April 2022

So speichern Sie Dateien in der Datenbank in Django

Ich versuche, Dateien mit Django-Formularen hochzuladen und diese Dateien in der Datenbank selbst zu speichern. Ich konnte den Link der Datei in der Datenbank speichern und die Datei selbst in einem Verzeichnis speichern, das ich in Media_root angegeben habe. Können Sie mir bitte helfen und mir sagen, was ich in meinem Code ändern kann, damit Dateien in der Datenbank gespeichert werden.

hier ist mein Code:

Modelle.py

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

Formen.py

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

Ansichten.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')

app\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)

Projekt\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'),)


Lösung des Problems

Django bietet BinaryField, mit dem Sie beliebige Binärdaten speichern können, einschließlich Dateiinhalte.

Bitte beachten Sie, dass die Dokumentation auch sagt:

Obwohl Sie vielleicht darüber nachdenken, Dateien in der Datenbank zu speichern, bedenken Sie, dass dies in 99 % der Fälle ein schlechtes Design ist. Dieses Feld ist kein Ersatz für die ordnungsgemäße Handhabung statischer Dateien.

Wenn Sie die Dateien lieber nicht im Dateisystem Ihres Webservers speichern möchten, können Sie andere Optionen wie Amazon S3 oder nur einen FTP-Server erkunden. Werfen Sie einen Blick auf die django-storages- Bibliothek, sie bietet eine schöne Reihe von Optionen.

Keine Kommentare:

Kommentar veröffentlichen

Warum werden SCHED_FIFO-Threads derselben physischen CPU zugewiesen, obwohl CPUs im Leerlauf verfügbar sind?

Lösung des Problems Wenn ich das richtig verstehe, versuchen Sie, SCHED_FIFO mit aktiviertem Hyperthreading ("HT") zu verwenden, ...