Django - 对动态创建的文本文件的权限被拒绝

时间:2016-06-29 10:09:04

标签: python django

我正在努力制作一个可下载的文本文件,我想我已经实现了这一点,但是当我运行代码时,我得到了一个权限被拒绝的错误。

当我打开这个文本文件时,它是否会在文件系统中的任何位置创建?因为我不想存储这些文件,只需创建它们并将它们下载到用户机器

IOError at /networks/configs/STR-RTR-01/7
[Errno 13] Permission denied: u'STR-CARD-RTR-01.txt'

配置:

def configs(request, device, site_id):
    site = get_object_or_404(ShowroomConfigData, pk=site_id)   
    config_template  = get_object_or_404(ConfigTemplates, device_name=device)

    file_name = device[:4] + site.location.upper()[:4] + "-" + device[4:] + ".txt"

    device_config = None
    with open(file_name, 'w') as config_file:
        device_config = env.from_string(config_template.config)

        device_config.stream(
            STR         = site.location.upper()[:4],
            IP          = site.subnet,
            BGPASNO     = site.bgp_as,
            LOIP        = site.r1_loopback_ip,         
            Location    = site.location,
            Date        = site.opening_date,
        ).dump(config_file)

    return render(request, file_name, {
    }) 

1 个答案:

答案 0 :(得分:0)

如果目标是提供一个用户可以下载自动生成的文件的链接,则无需向磁盘写入任何内容。

您可以在Python字符串中构建所需的内容,并使用Content-Disposition标头建议用户的浏览器应该下载文件而不是显示它,并使用其filename参数来指定用户保存文件的默认文件名。

一个稍微简单的视图函数示例,它可以做到这一点......

from django.http import HttpResponse

def get_config_file(request):

    filename = 'config.txt'
    content = 'This is the content of my config file'
    content_type = 'text/plain'
    content_disposition = 'attachment; filename=%r' % filename

    response = HttpResponse(content, content_type=content_type)
    response['Content-Disposition'] = content_disposition

    return response