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

通常我们读取文件会同web页面结合,从html的input file 中上传文件,后台再进行获取。

//前端html页面
"/importData/" method="post" enctype="multipart/form-data"> **{% csrf_token %}** type='text' name='textfield' id='textfield' class='txt' /> type='button' class='btn' value='浏览...' /> type="file" name="fileField" class="fileField" id="fileField" size="28" οnchange="document.getElementById('textfield').value=this.value" /> 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)