django - 下载二进制文件数据

标签 django django-models django-templates

如何使用模板下载 BinaryField 数据/文件。就像我们对 FileField 所做的那样。

<td><a href={{certificate.bytes.url}} download></a>

我过去了下面的所有 url.py 和 view.py 文件,请查看这可能会提供我的代码的提取 View 。请帮我解决这个问题,我是 Django 新手。 ...................................................... ...................................................... ...................................................... ......

url.py

from django.conf.urls.static import static
from django.conf.urls import url
from django.views.defaults import page_not_found
urlpatterns=[
    path('',views.index, name = 'index'),
    url(r'^list/$', views.list, name='list'),
    url(r'^list/create$', views.certificate_create, name='certificate_create'),
    url(r'^list/(?P<id>\d+)/update$', views.certificate_update, name='certificate_update'),
    url(r'^list/(?P<id>\d+)/delete$', views.certificate_delete, name='certificate_delete'),
    path('download',views.download, name = 'download'),


]
if settings.DEBUG:
    urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

最佳答案

因此,我们需要包含 BinaryField 的 Django 模型。

模型.py

class Person(models.Model):
    name = models.CharField(max_length=55)
    surname = models.CharField(max_length=55)
    image = models.BinaryField()

    class Meta:
        db_table = 'person'

urls.py

from django.urls import path
from . import views
urlpatterns = [
    path('', views.index, name='index'),
    path('download/<int:pk>/', views.download, name='download'),
]

views.py

import io
from django.shortcuts import render
from django.http import FileResponse
from .models import Person

def index(request):
    # there are listed all models.
    persons = Person.objects.all()
    return render(request, 'index.html', {'persons': persons})

def download(request, pk):
    # this url is for download
    try:
        obj = Person.objects.get(pk=pk)
    except Person.DoesNotExist as exc:
        return JsonResponse({'status_message': 'No Resource Found'})
    get_binary = obj.image
    if get_binary is None:
        return JsonResponse({'status_message': 'Resource does not contian image'})
    if isinstance(get_binary, memoryview):
        binary_io = io.BytesIO(get_binary.tobytes())
    else:
        binary_io = io.BytesIO(get_binary)
    response = FileResponse(binary_io)
    response['Content-Type'] = 'application/x-binary'
    response['Content-Disposition'] = 'attachment; filename="{}.png"'.format(pk) # You can set custom filename, which will be visible for clients.
    return response

index.html

{% for person in persons %}
    <a href="{% url 'download' pk=person.pk %}">{{ person.name }}</a><br />
{% endfor %}

这是从服务器发送二进制文件并下载的解决方案。显示所有组件。祝你好运!

关于django - 下载二进制文件数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56250679/

相关文章:

python - django-allauth:检查用户是否使用社交帐户注册

django - 如何在 Amazon S3 中使用 django-photologue?解决 NotImplementedError

sql - 如何在不切断底部联系的情况下使用 Django Queryset 查找列中的 top-X 最高值?

python - 有没有办法在 Django 中同时循环两个列表?

python - 外键引用存储在 django 级别还是 MySQLDB

python - Django模板转换为字符串

django - django 'DateTimeField'没有默认值错误

python-3.x - Django Channels 和 Web Socket 以及第三方数据库

python - 使用 Django 中的表单创建自定义 html 模板

Django 站点正在开发中 : CSS not loading for all pages