介绍
这篇文章将为大家详细讲解有关django中上传csv文件并进行入库处理的示例,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。
运维平台导入数据这一功能实在是太重要了,我敢说在没有建自己的cmdb平台前,大多数公司管理服务器信息肯定是表格,用表格最麻烦的就是有点更新就得每个人发一份,这样大家信息才能统一,很不方便,终于有一天受不了的了,搞了一个服务器信息管理平台,那面临的第一个问题不是说功能好或不不好,而是怎么才能把表里的数据导入到数据库中,所以你说重要不重要,当然如果你就喜欢自己手工录入(找虐的感觉),这个咱也不能说啥,各有所好嘛,那具体如何录的最快,这个不在我们今天的讨论范围,我只讨论如何自动导入。
提到导入,那一般有二个方法,一个是在前端上传完后存储在服务器上的某个目录里,然后读取文件进行分析处理。
另一种是上传文件后直接读取文件内容而不存储在服务器上,这二种方法都可以实现我们得目的,这篇主要是讨论的后面这种。
上传文件,首先我们建一个html文件,内容代码如下:
& lt; form action=皗%, url “myapp: upload_csv", %}“,方法=癙OST", enctype=岸嗖糠?form-data",类=癴orm-horizontal"祝辞, {%,csrf_token %} & lt; div 类=癴orm-group"祝辞 & lt;才能label =皀ame",类=癱ol-md-3 col-sm-3 col-xs-12 control-label"在文件:,& lt;/label> & lt;才能div 类=癱ol-md-8"比; ,,,& lt; input 类型=癴ile", name=癱sv_file", id=癱sv_file",要求=癟rue",类=癴orm-control"比; & lt;才能/div>,,,,,,,,,, & lt;/div> & lt; div 类=癴orm-group"祝辞,,,,,,,,,, & lt;才能div 类=癱ol-md-3 col-sm-3 col-xs-12 col-md-offset-3",在 ,,,,& lt; button 类=癰tn btn-primary"祝辞,& lt; span 类=癵lyphicon glyphicon-upload",祝辞& lt;/span> Upload & lt;/button> & lt;/div>才能, & lt;/div> & lt;/form>
这些都是基本的Html,只要主要enctype=岸嗖糠?格式”这个参数就可以,其它无特别说明。
展示如图:
加入路,由
url(" # 39; ^上传/csv/$ & # 39;,, views.upload_csv,, name=& # 39; upload_csv& # 39;),
那接下来就是处理上传的文件并入库了,这个代码在视图。py文件里,代码如下:
def upload_csv(请求): data =, {} if “GET",==, request.method: return 渲染(请求,,“myapp/upload_csv.html",,数据) #,才能if not , then 继续 试一试: 时间=csv_file request.FILES (“csv_file") if not  csv_file.name.endswith (& # 39; . csv # 39;): messages.error(请求,& # 39;File  is not CSV 类型# 39;) return HttpResponseRedirect(反向(“myapp: upload_csv")) ,,,# if file is too 大,回报 if csv_file.multiple_chunks (): messages.error(请求,“Uploaded file  is too big (% .2f MB)干净,%,(csv_file.size/(1000 * 1000))) return HttpResponseRedirect(反向(“myapp: upload_csv")) , 时间=file_data csv_file.read () .decode (“utf-8") , 时间=lines file_data.split (“\ n") # loop 配套;从而,lines 以及节省;them 拷贝数据库只If error ,, store as string 以及then 显示 for line 拷贝: 时间=fields line.split (“”) data_dict =, {} data_dict [“name"],[0]=,字段 data_dict [“start_date_time"],[1]=,字段 data_dict [“end_date_time"],[2]=,字段 data_dict [“notes"],[3]=,字段 试一试: 时间=form EventsForm (data_dict) if form.is_valid (): form.save () 其他: logging.getLogger (“error_logger") . error (form.errors.as_json ()) except Exception  as e: logging.getLogger (“error_logger") . error (repr (e)) 通过 , except Exception  as e: logging.getLogger (“error_logger") . error (“Unable 用upload 文件只“repr (e)) + messages.error(请求,“Unable 用upload 文件只“repr (e)) + , return HttpResponseRedirect(反向(“myapp: upload_csv"))django中上传csv文件并进行入库处理的示例