建议和反馈

请填写你的反馈内容

使用PYTHON DJANGO上传和处理CSV文件的动手配方

2019-10-03 ·1550次阅读 ·读完需要5分钟

Django是一个基于Python的免费开放源Web框架,它遵循model-template-view体系结构模式。它由Django软件基金会维护。Django的主要目标是简化复杂的,数据库驱动的网站的创建。



使用Django,您可以在几小时内将Web应用程序从概念带到启动。Django解决了许多Web开发的麻烦,因此您可以专注于编写应用程序而无需重新发明轮子。它是免费和开源的。


Django包含许多其他功能,可用于处理常见的Web开发任务。Django负责开箱即用的用户身份验证,内容管理,站点地图,RSS feed和许多其他任务。



在本食谱中,我们将向您展示如何上传一个csv文件,然后处理内容而不在服务器上存储文件。一种方法是上载文件,将其存储在上载目录中,然后读取文件。另一种方法是上载文件,直接从帖子数据中读取文件,而无需将其存储在内存中并显示数据。我们将在此处使用后一种方法。


上载CSV文件: 

首先创建HTML表单以上载csv文件。使用下面的代码相同。 


<form action =“ {%url” myapp:upload_csv“%}” method =“ POST” enctype =“ multipart / form-data” class =“ form-horizontal”> 

{%csrf_token%} 

<div class =“ form- group“> 

<label for =” name“>文件:</ label> 

<div> 

<input type =” file“ name =” csv_file“ id =” csv_file“ required =” True“ class =” form-control“> 

</ div>                    

</ div> 

<div class =“ form-group”>                    

<div> 

<button> <span> </ span>上传</ button> 

</ div> 

</ div>

</ FORM>


重要提示:不要忘记在表单中包含enctype =“ multipart / form-data”。


在URL模式中添加URL。 


url(r'^ upload / csv / $',views.upload_csv,name ='upload_csv'),

在名称为upload_csv的视图中创建一个函数。


处理CSV文件: 

在视图功能中,从发布数据中获取文件并进行处理。我在项目中使用了以下代码。



def upload_csv(request):

data = {} 

如果“ GET” == request.method:

返回render(request,“ myapp / upload_csv.html”,data)

#如果不是GET,则继续

尝试try:

csv_file = request。 FILES [“ csv_file”] 

如果不是csv_file.name.endswith('。csv'):

messages.error(请求,'文件不是CSV类型')

return HttpResponseRedirect(reverse(“ myapp:upload_csv”))

#如果文件是太大,

如果csv_file.multiple_chunks()则返回消息:

messages.error(request,“上传的文件太大(%.2f MB)。”%(csv_file.size /(1000 * 1000),))

返回HttpResponseRedirect(reverse (“ myapp:upload_csv”))

               file_data = csv_file.read()。decode(“ utf-8”)          


               lines = file_data.split(“ \ n”)

#循环遍历这些行并将其保存在db中。如果显示错误,则存储为字符串,然后

在一行中显示为一行:                                           

fields = line.split(“,”)

data_dict = {} 

data_dict [“ name”] = fields [0] 

data_dict [“ start_date_time”] = fields [ 1] 

data_dict [“ end_date_time”] =字段[2] 

data_dict [“ notes”] =字段[3] 

尝试:

form = EventsForm(data_dict)

如果form.is_valid():

form.save()                                   

否则:

logging.getLogger(“ error_logger”)。error(form.errors.as_json())                                                                                     

除外,例如e:

logging.getLogger(“ error_logger”)。error(repr(e))                              

通过


        例外,例如e:

logging.getLogger(“ error_logger”)。error(“无法上传文件。” + repr(e))

messages.error(请求,“无法上传CVS文件。” + repr(e))


        返回HttpResponseRedirect(reverse(“ myapp:upload_csv”))


在上面的代码中,我们正在执行以下操作:


-如果这是GET请求,请呈现上载csv html文件。

-如果这是POST请求,请继续。

-第一步是检查文件扩展名。因此,如果文件名不是以.csv结尾,则这不是有效文件。您也可以实施自己的检查或其他检查。

-接下来,我们检查文件是否太大。如果这些测试失败,我们将返回html表单页面,并显示相应的错误消息。为了显示错误/成功消息,我们使用消息框架。请导入所需的模块。

-接下来,我们读取文件并用换行符分割内容。

-遍历每行并使用逗号分隔行。

-为了遵循此食谱,假设我们的csv文件具有4列数据。我们将数据存储在字典中,然后将数据字典传递给表单。

-如果表单有效,我们将继续保存表单,从而在DB中创建条目。

-如果表单无效,或引发任何其他错误,我们会将错误记录在日志文件中。


结束语

在这个简短的教程中,您将学习如何即时处理CVS文件上传而不将其逐步存储在数据库中。如您所见,Django是处理和处理html表单的非常强大的工具。


评论(0)问答(0)
请先登录或注册

请先登陆或注册

相关推荐

兰悠易:主流币BTC ETH LTC 11.18晚间行情分析

现在各币种都处于下行阶段,就连主流币也逃脱不出下跌的命运;不过整体走势还是在笔者的预料之中进行,若是有跟上笔者思路操作的朋友,应该获利良多吧;没有跟上的朋友,也不用太过担心,好的行情比比皆是,能及时把......
兰悠易 · 2019-11-18
41阅读 · 0赞赏 · 0问答

王佳柏:空方持续发力 走势依旧保持下行

比特币今日整体走势以下行为主,主要分两个阶段下跌:第一阶段是在凌晨六点之后,由于多次向上试探未果后承压回落,跌势维持了数小时之后,渐渐的收回以低位8419结束第一次的下行,随即转为低位震荡运行的走势;......
王佳柏 · 2019-11-18
78阅读 · 0赞赏 · 0问答

李向午:比特币空头强势高压,多头能否稳住支撑。

李向午:比特币空头强势高压,多头能否稳住支撑。  BTC行情分析  比特币昨日以一个阳十字星收盘,价格延续早几天的下跌趋势。从小时图中可以看出今日比特币开盘价格保持震荡上行节奏,早间六时开始价格下跌直......
李向午 · 2019-11-18
43阅读 · 0赞赏 · 0问答

王佳柏:比特币震荡区间下移 可见空方继续占据主导低位

比特币早间行情处于8550一线高位震荡,可是在早间一根带有长上影线的阴K改变了震荡走势的命运,行情开始不断的向下滑动,并回踩下方的支撑点位,此时正处于8450一线震荡运行;如果在此处“摔跤”真是不应该......
王佳柏 · 2019-11-18
73阅读 · 0赞赏 · 0问答

谈喻凯:BTC如期破位继续承压 EOS ETH操作建议

  投资千万条,风险第一条;策略千百种,哪个适合我;思路没跟上,踏空两行泪。关注谈喻凯公众號币圈散户联盟,精选全球最准行情分析,消息面,技术面为你指引解读,带你把握行情,瞄准良机,稳健交易。    截......
谈喻凯 · 2019-11-18
133阅读 · 0赞赏 · 0问答

兰悠易:比特币上行不成 回调向下寻找有力支撑

比特币日线图中,K线接连两日收阳,向上最高触碰到8585,而在今日高位再次创新,向上突破8600到达高点8620位置,不过新的起点还未站稳,就成了这次上行的真高点位;多方动力的减弱,便给了空方可趁之机......
兰悠易 · 2019-11-18
161阅读 · 0赞赏 · 0问答

Diva

1214

LK币

2

粉丝

31

笔记

感谢"Diva"

这篇精彩的笔记,目前已经帮助

  • 0
  • 1
  • 5
  • 5
  • 0
喜欢0
链客社群 加入

微博进入

商务合作>

广告投放>

公司名称:北京链客行科技有限公司

联系方式:010-67707199

ICP备案号:京ICP备18032136号

Copyright:链客区块链技术问答社区 版权所有

感谢您的提问,问题被社区永久收入以便新人查看。一定要记得采纳最佳答案哦!加油!

感谢您的善举,每一次解答会成为新人的灯塔,回答被采纳后获得20算力和相应的LK币奖励

您将赞赏给对方2LK币的奖励哦!感谢您的赞赏!

您将赞赏给对方2LK币的奖励哦!感谢您的赞赏!