Python Django:显示可下载的自定义日志文件

Python Django:显示可下载的自定义日志文件,python,django,Python,Django,我有一个小的Django项目,用户可以上传一个csv文件,然后解析到数据库中。 如果在处理过程中检测到一些格式化问题,我会将它们写入pd.DataFrame中,并希望随后将它们显示给用户,以便他们知道csv的哪些行无法正确处理 我想了一些方法来做到这一点。 我可以只为日志创建自定义模型,但我希望用户能够下载日志,这就是为什么我希望将日志保存为csv并显示下载链接以及日志内容,但我不知道如何做,或者是否有更好的方法 我的代码如下所示: class ListVerifyView(ListView):

我有一个小的Django项目,用户可以上传一个csv文件,然后解析到数据库中。 如果在处理过程中检测到一些格式化问题,我会将它们写入
pd.DataFrame
中,并希望随后将它们显示给用户,以便他们知道csv的哪些行无法正确处理

我想了一些方法来做到这一点。 我可以只为日志创建自定义模型,但我希望用户能够下载日志,这就是为什么我希望将日志保存为csv并显示下载链接以及日志内容,但我不知道如何做,或者是否有更好的方法

我的代码如下所示:

class ListVerifyView(ListView):
   def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        ...
        return context
   def post(self, request, *args, **kwargs):
        for k, v in request.POST.items():
            try:
                col_dict[v] = int(k)
            except ValueError:
                pass
        ...
        error_log = pd.DataFrame(columns=['Chemical', 'Error'])
        ...
        if not error_log.empty:
            messages.add_message(self.request, messages.WARNING, 'Some ERRORS occurred during import!')
            return HttpResponseRedirect(reverse_lazy('show_error'))
        return HttpResponseRedirect(reverse_lazy('home'))
your_log_mdl_instance.log_file_field = ContentFile(df.to_csv,name='error.log')
your_log_mdl_instance.save()
with File(open('/path/to/exported_file.cvs','rb'),name='error.log'):
    your_log_mdl_instance.log_file_field = f
    your_log_mdl_instance.save()
我考虑将日志保存为
models.FileField
并将
pk
传递给
reverse\u lazy('show\u error')
,但我不知道如何将
df.to\u csvfile
保存到我的
媒体根目录中

提前谢谢。
Fabian

如果日志数据是字符串,则可以使用包装器,使用日志字符串初始化它,并将其分配给模型实例的
模型。文件字段
,类似于以下内容:

class ListVerifyView(ListView):
   def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        ...
        return context
   def post(self, request, *args, **kwargs):
        for k, v in request.POST.items():
            try:
                col_dict[v] = int(k)
            except ValueError:
                pass
        ...
        error_log = pd.DataFrame(columns=['Chemical', 'Error'])
        ...
        if not error_log.empty:
            messages.add_message(self.request, messages.WARNING, 'Some ERRORS occurred during import!')
            return HttpResponseRedirect(reverse_lazy('show_error'))
        return HttpResponseRedirect(reverse_lazy('home'))
your_log_mdl_instance.log_file_field = ContentFile(df.to_csv,name='error.log')
your_log_mdl_instance.save()
with File(open('/path/to/exported_file.cvs','rb'),name='error.log'):
    your_log_mdl_instance.log_file_field = f
    your_log_mdl_instance.save()
或者,如果已导出csv文件,则可以使用包装器,如下所示:

class ListVerifyView(ListView):
   def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        ...
        return context
   def post(self, request, *args, **kwargs):
        for k, v in request.POST.items():
            try:
                col_dict[v] = int(k)
            except ValueError:
                pass
        ...
        error_log = pd.DataFrame(columns=['Chemical', 'Error'])
        ...
        if not error_log.empty:
            messages.add_message(self.request, messages.WARNING, 'Some ERRORS occurred during import!')
            return HttpResponseRedirect(reverse_lazy('show_error'))
        return HttpResponseRedirect(reverse_lazy('home'))
your_log_mdl_instance.log_file_field = ContentFile(df.to_csv,name='error.log')
your_log_mdl_instance.save()
with File(open('/path/to/exported_file.cvs','rb'),name='error.log'):
    your_log_mdl_instance.log_file_field = f
    your_log_mdl_instance.save()