django中上传csv文件并进行入库处理的示例

  介绍

这篇文章将为大家详细讲解有关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=岸嗖糠?格式”这个参数就可以,其它无特别说明。

展示如图:

 django中上传csv文件并进行入库处理的示例

加入路,由

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文件并进行入库处理的示例