ZetCode

Django FileResponse

最后修改于 2023 年 1 月 9 日

Django FileResponse 教程演示了如何在 Django 中使用 FileResponse 发送文件。

Django

Django 是一个高级 Python Web 框架。它鼓励快速开发和清晰、实用的设计。Django 的主要目标是简化复杂、数据库驱动的网站的创建。

Django 由 Django Software Foundation 维护。

Django FileResponse

FileResponseStreamingHttpResponse 的一个子类,它针对二进制文件进行了优化。文件会被自动关闭。

from django.http import FileResponse

response = FileResponse(open('myfile.png', 'rb'))

FileResponse 接受任何具有二进制内容的类文件对象。

Django FileResponse 示例

在下面的示例中,我们创建了一个 Django 应用程序,用于向客户端发送文件。该文件是一个 JPEG 图像,位于项目根目录下的 images 目录中。

$ mkdir fileresponse 
$ cd fileresponse
$ mkdir src images
$ cd src

我们创建项目以及 imagessrc 子目录。然后我们进入 src 目录。

$ django-admin startproject fileresponse .

我们在 src 目录中创建一个新的 Django 项目。

注意:如果提供了可选的目标目录,Django 将使用该现有目录作为项目目录。如果省略,Django 会根据项目名称创建一个新目录。我们使用点号 (.) 在当前工作目录中创建项目。

$ django-admin startapp sendfile

我们创建一个新的应用。sendfile 应用包含将图像发送到客户端的功能。

$ cd ..
$ pwd
/c/Users/Jano/Documents/pyprogs/django/fileresponse

我们显示当前工作目录。

$ tree /f
src
│   db.sqlite3
│   manage.py
│
├───fileresponse
│       settings.py
│       urls.py
│       wsgi.py
│       __init__.py
│
├───images
│       bojnice.jpg
│
└───sendfile
    │   admin.py
    │   apps.py
    │   models.py
    │   tests.py
    │   views.py
    │   __init__.py
    │
    └───migrations
            __init__.py

这是项目目录的内容。

src/fileresponse/settings.py
...
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'sendfile',
] 
...

setting.py 文件中,我们将 sendfile 组件添加到已安装的应用中。

src/fileresponse/urls.py
from django.contrib import admin
from django.urls import path
from sendfile.views import send_file

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', send_file, name='send_file'),
]

我们为根页面添加了一个新路由;它调用 sendfile 组件中的 send_file 函数。

src/sendfile/views.py
from django.http import FileResponse

def send_file(response):

    img = open('images/bojnice.jpg', 'rb')

    response = FileResponse(img)

    return response

send_file 中,我们读取图像并将其作为 FileResponse 对象返回给客户端。

$ python manage.py runserver

我们运行服务器并导航到 http://127.0.0.1:8000/。我们应该能在浏览器中看到该图像。

在本文中,我们演示了如何在 Django 中发送文件。