簡體   English   中英

如何在django中將文件保存到數據庫

[英]How to save files to database in django

我正在嘗試使用 django 表單上傳文件並將這些文件保存在數據庫本身中。 我已經能夠將文件的鏈接保存在數據庫中,並將文件本身保存在我在 Media_root 中指定的目錄中。請您幫我並告訴我我可以在代碼中更改哪些內容以便將文件保存在數據庫中.

這是我的代碼:

模型.py

from django.db import models


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

表格.py

from django import forms

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

視圖.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')

應用\\網址.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)

項目\\網址.py

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

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

Django 提供BinaryField可讓您存儲任何二進制數據,包括文件內容。

請注意,文檔還說:

盡管您可能會考慮將文件存儲在數據庫中,但請考慮在 99% 的情況下這是糟糕的設計。 此字段不能替代正確的靜態文件處理。

如果您不想將文件存儲在 Web 服務器的文件系統上,您可以探索其他選項,例如 Amazon S3 或僅使用 FTP 服務器。 看看django-storages庫,它提供了很多不錯的選項。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM