基于flask的单词复习程序-网页版问题记录

笔者之前用Python编写了一个复习单词的脚本,前端时间尝试将其调整为网页的版本。在这里做一些问题的记录。

其功能非常简单,用户以Excel表格的形式上传自己今日新记录的单词,样例格式如下:

四列分别表示:单词,翻译,出现的位置,记录的时间。

程序将用户新记录的单词添加到总单词表中,并进行去重合并操作。

程序根据目前时间,查找出1,2,7,15天之前的单词,用作复习。

程序流程如图:

这里仅对遇到的问题做一些记录:

目录

Pycharm 中使用Anaconda虚拟环境,出现:

AssertionError: SRE module mismatch错误,并且无法查看虚拟环境下的包(pip list失效)

Pycharm 中使用Django报错,许多包无法导入,报错:AttributeError: __name__

前后端处理Excel表格:

1.接受并处理:

2.插入和删除操作

3.处理并返回:

jQuery和Ajax通信模板:


Pycharm 中使用Anaconda虚拟环境,出现:

AssertionError: SRE module mismatch错误,并且无法查看虚拟环境下的包(pip list失效)

删除环境变量中的PYTHONPATH,重启pycharm即可。

 

Pycharm 中使用Django报错,许多包无法导入,报错:AttributeError: __name__

可能是python版本有问题或者python安装的问题。

解决方法:

1.使用Anaconda新建一个纯净的虚拟环境,使用虚拟环境运行Django即可。

2.如果不是使用的Anaconda,重装python即可。

注:python3.7 与 Django3.2兼容

 

前后端处理Excel表格:

1.接受并处理:

0.从request里面接收:

file_storage = request.files.get['file_data']  #是storage格式

file_data = file_storage.read()         #是二进制流
print(file_storage.filename)           #输出文件的名字

1.openpyxl,不适用xls

wb  = openpyxl.load_workbook(file_storage)#打开Excel
sheet = wb.worksheets[0]                      #打开表
#sheet = wb['sheet1']                         #打开表
# sheet['A1'].value                          #获取数据
for row in sheet.iter_rows():                 #遍历表
    for cell in row:
        print(cell.coordinate, cell.value)

sheet['A1'].value='1111111'                   #修改数据,行列都是1开始
#sheet.cell(1,1).value='1111111'
#sheet.cell(1,1,'111111')

#max_row=sheet.max_row
#max_cow = sheet.max_column
wb.save('1234.xlsx')                         #保存文件

###以下为新建文件的方法
wb=openpyxl.Workbook()
wb.create_sheet(index=0,title='小猪')
 

2.pyexcel,缺点是只能读取本地的文件,不能直接读取前端发来的数据流。

3.xlrd,不适用xlsx  ,而且此方法只能读文件,不能写文件。

使用xlwt可以写Excel文件,但是必须生成一个新的Excel文件

使用xlutils可以进行读写Excel文件,但是其实是进行了一个拷贝。这里不多研究,可参考网上其他文章。

2.插入和删除操作

       1.插入操作

ws.insert_rows(2,3)#在第二行的前面插入3行,所以第一个参数不能是0
ws.insert_cols(1,2)#在第一列的前面插入2列,所以第一个参数不能是0

       2.删除操作

wk_sheet.delete_rows(3,2) #删除从第一行开始算的2行内容
wk_sheet.delete_cols(1,2) #删除从第一列开始算的2列内容

3.处理并返回:

1.转换为字节流/二进制流。

File_data是前文中直接接收到的二进制流。可以直接构造返回。

rv = make_response(file_data)
rv.headers['Content-Type'] = "application/vnd.ms-excel"
# rv.headers["Cache-Control"] = "no-cache"
rv.headers['Content-Disposition'] = 'attachment; filename={}.xlsx'.format('Output')
return rv

2.设置返回格式,(makeResponse),以附件的形式

3.使用flask-Excel库和pyexcel库,返回Excel文件

x = p.get_sheet(file_name='total.xlsx')

return excel.make_response(x, "xls", file_name="export_data")

 

3.返回本地文件:

1.返回静态文件

2.从目录返回,直接找到对应文件发送。

directory_path = os.getcwd()   # 假设在当前目录
return send_from_directory(directory_path, 'total.xlsx', as_attachment=True)

 

jQuery和Ajax通信模板:

注:ajax通信仅能交换数据,但是不能从后端下载文件

<head>
    <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.0/jquery.min.js"></script>
</head>

<script>

$('#today').click(function () {
    $.ajax({
        url:'/get_today',
        type:'post',
        data:'2021/4/30',
        success:function (data) {
            alert(data)
        },error:function () {
            alert('失败!')
        }
    })
})

</script>

 

前端设置按钮,从后端下载固定文件 以及 指定文件:

$('#all').click(function () {
    {#var queryForm = $("#queryCourseForm");#}
    var exportForm = $("<form action='/get_all' method='post'></form>")
    {#exportForm.html(queryForm.html());#}
    $(document.body).append(exportForm);
    exportForm.submit();
    exportForm.remove();
})

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值