Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何使用Django提供结果文件?_Python_Django Models_Django Forms_Django Templates_Django Views - Fatal编程技术网

Python 如何使用Django提供结果文件?

Python 如何使用Django提供结果文件?,python,django-models,django-forms,django-templates,django-views,Python,Django Models,Django Forms,Django Templates,Django Views,我开发了一个应用程序,从上传方法中获取输入文件,而不使用模型,并在服务器后面运行一些代码 像这样: /MyDjango_project_directory/media/input.csv 并在这样的位置生成一些结果文件 /Virtualenv_directory/MyDjango_project_directory/OutPut_files_directory/result.csv /Virtualenv_directory/MyDjango_project_directory/OutPut_

我开发了一个应用程序,从上传方法中获取输入文件,而不使用模型,并在服务器后面运行一些代码

像这样:

/MyDjango_project_directory/media/input.csv
并在这样的位置生成一些结果文件

/Virtualenv_directory/MyDjango_project_directory/OutPut_files_directory/result.csv
/Virtualenv_directory/MyDjango_project_directory/OutPut_files_directory/result.png
目前,我只是通过“views.py”中的“sys”命令将输出文件移动到“media”文件夹中,然后在呈现结果页面之前,通过下载链接可以成功下载文件。这是一个暂时的解决方案,对我来说是有效的,但不是我正在寻找的最佳解决方案。有没有人有什么好主意,我可以添加我的“output_目录”专门用于下载目的

已更新

我的看法:

from django.shortcuts import render
from django.core.files.storage import FileSystemStorage
from django.shortcuts import render, redirect
from django.conf import settings
from django.core.files.storage import FileSystemStorage
import os
import glob
from django.core.files.storage import FileSystemStorage

def Home_page(request):

    return render(request, 'protocol/home.html', {})


#def Main_protocol(request):
   # return render(request, 'protocol/main_protocol.html', {}

def simple_upload(request):
    result_files_list = []
    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)

        os.system("python /home/user/Desktop/pep_learn_project/new_pep_src/protocol/PEP_learn_1.0_selected/Sample_protocol.py > pro.log")
        os.system("rm /home/user/Desktop/pep_learn_project/new_pep_src/media/*.csv")


        base_link = "/home/user/Desktop/pep_learn_project/new_pep_src/"
        names = []
        files_to_download = glob.glob("/path_to_files/*.*")

        for i, f in enumerate(files_to_download):
            if f.split(".")[1] in ["csv", "jpg"]:
                names.append(files_to_download[i].split("/")[6])

        return render(request, 'protocol/successful.html', {
            'names': names, 'base_link':base_link
        })

    return render(request, 'protocol/main_protocol.html')
网址:

from django.conf.urls import url
from django.contrib import admin
from . import views

urlpatterns = [
    url(r'^$', views.Home_page, name='Home_page'),
    url(r'^protocol/$', views.simple_upload, name='simple_upload'),
]
模板:

{% block content %}

<style type="text/css">



    table {

     margin-bottom: 20px;

     border-collapse: collapse;
     border-spacing: 0;
     width: 30%;
     border: 1px solid #ddd;
     bgcolor: #00FF00;
}

th, td {
    border: none;
    text-align: left;
    padding: 8px;
}

tr:nth-child(even){background-color: #f2f2f2}

</style>



<div style="overflow-x:auto;">
  <table align="center">
    <tr>
      <th align="center">Result files</th>
    </tr>
    {% for a in names %}
    <tr>
     {% if a %}
      <td><a href="/media/{{a}}"> {{a}} </a> <br></td>
     {% endif %}
    </tr>
    {% endfor %}
  </table>
</div>


{% endblock %}
{%block content%}
桌子{
边缘底部:20px;
边界塌陷:塌陷;
边界间距:0;
宽度:30%;
边框:1px实心#ddd;
bgcolor:#00FF00;
}
th,td{
边界:无;
文本对齐:左对齐;
填充:8px;
}
tr:n子(偶数){背景色:#f2f2}
结果文件
{%用于名称中的%s}
{%如果是%}

{%endif%} {%endfor%} {%endblock%}
经过一番努力,我终于写下了我需要的东西:

意见如下:

def Download_files(request, file_name):

        file_path = os.path.join('/out_put_files', file_name)
        file_wrapper = FileWrapper(file(file_path,'rb'))
        file_mimetype = mimetypes.guess_type(file_path)
        response = HttpResponse(file_wrapper, content_type=file_mimetype )
        response['X-Sendfile'] = file_path
        response['Content-Length'] = os.stat(file_path).st_size
        response['Content-Disposition'] = 'attachment; filename=%s' % smart_str(file_name) 

        return response
以及网址:

 url(r'^protocol/(?P<file_name>.+)$', views.Download_files, name='Download_files'),
url(r'^protocol/(?P.+)$),views.Download_files,name='Download_files'),
我在回答我自己的问题,这意味着我不久前才知道这一点,并张贴在这里,以便如果有人可以从中受益。如果任何专家看到了这个答案,请仔细检查它,威瑟尔它是一个丑陋的解决方案还是一个合适的解决方案,它在部署过程中也会工作吗?。谢谢


这个问题帮助我理解并实现了这个概念:

你能在这里分享你的观点吗?@viveksyngh更新谢谢