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