【问题标题】:Uploading and retrieving files from django frontend to postgresql backend从 django 前端上传和检索文件到 postgresql 后端
【发布时间】:2018-08-06 19:06:23
【问题描述】:

这是我在 postgres 中的表格:

我如何将其引入前端,以便用户无需访问数据库即可上传他们的文档。现在我只能将文档上传到文件系统而不是数据库:

views.py:

def upload(request):
if request.user.is_authenticated:
    username = request.user.username
if request.method == 'POST' and request.FILES['myfile']:
    myfile = request.FILES['myfile']
    fs = FileSystemStorage()
    filename = fs.save(myfile.name, myfile)
    uploaded_file_url = fs.url(filename)
    return render(request, 'app/upload.html', {
       "uploaded_file_url": uploaded_file_url,
       "username": username,
    })
return render(request, 'app/upload.html', {
    "username": username,
})

上传.html:

 {% if form.errors %}
    <p>You did not select a file to upload!</p>
{% endif %}

<form method="POST" enctype="multipart/form-data">
    {% csrf_token %}
    <input type="file" name="myfile">
    <button type="submit">Upload</button>
</form>

{% if uploaded_file_url %}
    <p>File uploaded at: <a href="{{ uploaded_file_url }}">{{ uploaded_file_url }}</a></p>
{% endif %}

models.py:

class Document(models.Model):
Document_name = models.CharField(max_length=255, default='Document_name')
Date = models.DateField()
Client_id = models.ForeignKey(ClientDetail, on_delete=models.CASCADE)


def __str__(self):
    return self.Document_name

架构:

还有我将如何检索上传的文档。

【问题讨论】:

  • 请同时显示该 Postgres 表的架构。它是 Django 管理的模型,还是单独的数据库? (如果是 Django 模型,还要显示模型代码。)
  • 已编辑原始问题。它是 Django 管理的模型,但我认为我们最近没有进行迁移,因此 models.py 中缺少 pdf、doc、ppt、xlsx 字段
  • 我不敢相信这是您拥有的 Django 模型,因为它缺少出现在数据库表中的 pdf/doc/ppt/xlsx 字段。跨度>
  • 我们将需要实际的数据库定义 - 恕我直言,但我不在乎您是否完成了迁移。
  • 该架构有帮助吗?

标签: python html django database postgresql


【解决方案1】:

给你一个例子:

settings.py

MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')

urls.py

from django.conf.urls.static import static
urlpatterns = [
    ...
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

models.py

from django.core.validators import FileExtensionValidator
class Document(models.Model):
    name = models.CharField(max_length=255, default='Document_name')
    date = models.DateField()
    client = models.ForeignKey(ClientDetail, on_delete=models.CASCADE)
    myfile = models.FileField(validators=[
        FileExtensionValidator(allowed_extensions=['pdf', 'doc', 'ppt', 'xlsx'])
    ])

    def __str__(self):
        return self.name

forms.py

from django import forms
from .models import Document
class DocumentForm(forms.ModelForm):
    class Meta:
        model = Document
        fields = '__all__'

上传.html:

<form method="post" enctype="multipart/form-data">
    {% csrf_token %}
    {{ form.as_p }}
    <input type="submit" value="ok">
</form>
{% if uploaded_file_url %}
    <p>File uploaded at: <a href="{{ uploaded_file_url }}">{{ uploaded_file_url }}</a></p>
{% endif %}

views.py

def upload(request):
    if request.user.is_authenticated: 
        # Is it better to use @login_required ?
        username = request.user.username
    else:
        username = ''
    if request.method == 'POST':
        form = DocumentForm(request.POST, request.FILES)
        if form.is_valid():
            doc = form.save()
            return render(request, 'app/upload.html', {
               "form": DocumentForm(),
               "uploaded_file_url": doc.myfile.url,
               "username": username,
            })
    else:
        form = DocumentForm()
    return render(request, 'app/upload.html', {"form": form})

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-25
相关资源
最近更新 更多