如何将 JSON 文件的内容放入响应中

qar*_*dso 5 python django json file

我的计算机上有一个文件,我试图从 django 视图中将其作为 JSON 提供。

def serve(request):
    file = os.path.join(BASE_DIR, 'static', 'files', 'apple-app-site-association')
    response = HttpResponse(content=file)
    response['Content-Type'] = 'application/json'
Run Code Online (Sandbox Code Playgroud)

我返回的是导航到 URL 时的文件路径

/Users/myself/Developer/us/www/static/files/apple-app-site-association
Run Code Online (Sandbox Code Playgroud)

我在这里做错了什么?

Emi*_*ron 5

os.path.join返回一个字符串,这就是为什么你在响应的内容中得到一个路径。您需要先读取该路径下的文件。

对于静态文件

如果文件是静态的并且在磁盘上,您可以使用网络服务器返回它并完全避免使用 python 和 django。如果文件需要身份验证才能下载,您仍然可以使用 django 处理它,并返回一个X-Sendfile标头(这取决于网络服务器)。

提供静态文件是网络服务器的工作,Nginx 和 Apache 非常擅长这一点,而 Python 和 Django 是处理应用程序逻辑的工具。

读取文件的最简单方法

def serve(request):
    path = os.path.join(BASE_DIR, 'static', 'files', 'apple-app-site-association')
    with open(path , 'r') as myfile:
        data=myfile.read()
    response = HttpResponse(content=data)
    response['Content-Type'] = 'application/json'
Run Code Online (Sandbox Code Playgroud)

这受到了如何将文本文件读入 Python 中的字符串变量的启发

更高级的解决方案

见dhke的答案上StreamingHttpResponse。

附加信息