您的位置:首页 > 编程语言 > Python开发

python学习(五)-Django处理从页面上传的文件

2018-01-16 16:29 706 查看
通常我们读取文件会同web页面结合,从html的input file 中上传文件,后台再进行获取。

//前端html页面
<form action="/importData/" method="post" enctype="multipart/form-data">
**{% csrf_token %}**
<input type='text' name='textfield' id='textfield' class='txt' />
<input type='button' class='btn' value='浏览...' />
<input type="file" name="fileField" class="fileField" id="fileField" size="28"
onchange="document.getElementById('textfield').value=this.value" />
<input type="submit" name="submit" class="btn" value="上传" />


//后台
def read_txt(filename):
txt_pd = pd.read_table(filename)
print(type(txt_pd))
print(txt_pd)
txt_pd.rename(columns={'price-designation ': 'price-designation'}, inplace=True)

return txt_pd

**@csrf_protect**
def import_data(request):
if request.method == 'POST':
try:
url = request.FILES.get('fileField')
print('url is : ', url)
print(type(url))
f_txt = read_txt(url)
# engine = create_engine("mysql+mysqldb://root:root@localhost:3306/test?charset=utf8")
# pd.io.sql.to_sql(f_txt, 'webUI_salesdata', con=engine, if_exists='append', index=None)
print('Done!')
except ImportError as e:
print "Error %d: %s" % (e.args[0], e.args[1])
return render(request, 'importData.html')


1.enctype=”multipart/form-data”,设置表单的MIME编码。默认情况,这个编码格式是application/x-www-form-urlencoded,不能用于文件上传;只有使用了multipart/form-data,才能完整的传递文件数据。

2.{% csrf_token %}对应后台@csrf_protect,这部分的设置通常出现在前后具有请求交互导致的forbidden 403错误,具体解决方案以及解释:https://www.cnblogs.com/zhaof/p/6281482.html

3.request.FILES.get,Django处理上传一个文件的时候,文件数据被放在request.FILES中,另外与第一点对应,有属性enctype=”multipart/form-data”.否则,request.FILES将是空的。我们在后台通过get,获取到的是一个InMemoryUploadedFile,通过pandas直接转换为dataframe,即可进行数据库写入。

关于Django处理上传的文件:http://blog.chinaunix.net/uid-21633169-id-4349787.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  python