Python实现小型信息管理系统踩过的坑(更新中)

一、同一目录下的py文件无法互相调用

自检查发现是文件路径问题。如下图的目录架构下,在views.py文件中调用db.py文件中的类或函数。
图1.1
首先如下图设置根目录,默认是当前已配置环境的Python项目根目录。
图1.2
如下图,按照已设置的根目录下的文件相对路径进行引入即可。
图1.3

二、flask的自动渲染路径

简单写法如下,render_template的参数中,第一个参数为前端模板,后继参数均为模板中待填充的部分。
这一部分等具体化再补充。
在这里插入图片描述

三、layui的表格参数传递

前端等待后台数据的表格设置:

// 参考layui文档
<table class="layui-hide" id="spideuser" lay-filter="test"></table>

前端JavaScript:

// 参考layui文档
table.render({
    elem: '#spideuser'
    , height: 420
    , url: '/spideuser/json/' //数据接口
    , title: '备选用户表'
    , cols: [[ //表头
        {type: 'checkbox', fixed: 'left', width: 250}
        , {field: 'name', title: '昵称', align: 'center', width: 485}
        , {field: 'type', title: '类别', align: 'center', width: 485}
    ]]
});

// 处理复选框选中数据
table.on('checkbox(test)', function(obj){
    datas.push(obj.data); // 向列表中添加选中行数据
});

数据接口即为表格需要的JSON数据所在的URL,可在后台通过函数生成。

""" 同样参考layui的demo表格的JSON数据格式 """
# 备选数据的json
@main.route('/spideuser/json/')
def data_to_json():
    d = DBlink()
    d.conndb()
    cname = d.selectAllUser()
    d.closedb()
    datalist = []
    for name in cname:
        data = {'name': name[0], 'type': name[1]}
        datalist.append(data)

    jsdata = {"code": 0, "msg": "", "count": 1000, "data": datalist}

    return jsonify(jsdata)

将前端数据传到后端:

function spaction(){
    var ajax = XMLHttpRequest();
    ajax.open( "post" , '/spideuser' , true );
    ajax.setRequestHeader( "Content-Type" , "application/json" );
    ajax.onreadystatechange = function () {
        if( ajax.readyState == 4 ) {
            if( ajax.status == 200 ) {
                msg.innerHTML = ajax.responseText;
            }
            else {
                msg.innerHTML = "HTTP请求错误!错误码:" + ajax.status;
            }
        }
    };

     // 必须要使用函数JSON.stringify将数据格式改为JSON,否则后台只能接收到Object字符串
    ajax.send( JSON.stringify(datas) ); 
}

在后台再对数据进行转码即可。

四、微博线程池爬虫遇到的问题

1. 多线程时随机报错

检查发现一个问题是微博的时间显示,2020年显示的是xx月xx日 hh:mm的格式;而2019年及之前是标准的datetime格式。另一个问题是,微博的设备不一定可见。

2. 线程池的最大线程数必须大于爬取微博页数

修改代码后解决。目测应该是多线程浏览器响应速度问题。

五、数据库操作遇到的问题

1. 插入操作错误

将爬取到的博文数据插入数据库时报错:

pymysql.err.InternalError: (1366, “Incorrect string value: ‘\xF0\x9F\x97\x93 \xE4…’ for column ‘博文内容’ at row 30”)

查询资料发现应该是数据库编码问题,因为部分特殊编码是4字节,而utf8只有3字节,需要使用utf8mb4进行编码。因此需要对表编码进行修改,同时相应字段编码也必须修改。
在这里插入图片描述
2. 查询操作错误

使用语句 sql = “SELECT * FROM 话题博文表 WHERE 话题 = %s AND 时段 LIKE ‘%分钟%’ ORDER BY 综合得分 DESC LIMIT 1” 进行查询操作时,报错:TypeError: not enough arguments for format string。
而使用语句 sql = “SELECT 话题, COUNT(*) AS 实时数量 FROM 话题博文表
WHERE 时段 LIKE ‘%分钟%’ AND 类别 = ‘实时’ GROUP BY 话题 ORDER BY 实时数量 DESC” 进行查询操作时,未报错。

报错说明运行sql时参数不够。但实际上检查两条语句发现,第一条语句还有%s作为sql的参数,而'%分钟%'的格式与%s类似,可知%是一个转义符号,则在第一条sql语句中使用%%表示%
修改后的sql语句为:

sql = "SELECT * FROM 话题博文表 WHERE 话题 = %s AND 时段 LIKE '%%分钟%%' ORDER BY 综合得分 DESC LIMIT 1"

再次运行后成功。

参考文章

[1] https://blog.csdn.net/weixin_33937499/article/details/85961463
[2] https://www.layui.com/doc/
[3] https://blog.csdn.net/genglukuan/article/details/89328477

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值