记录被Bug和逻辑坑强势调戏的日子

jinja2.exceptions.UndefinedError
jinja2.exceptions.UndefinedError: 'moment' is undefined

[2018-7-22]问题描述:flask-moment扩展,在宏macro中不能用,在include中可以用
解决方案:在导入宏的地方,导入带上下文的宏
{% import "_macros.html" as macro with context %}

做一个根据搜索条件返回结果的搜索的时候,一点搜索就一直报错,搜索条件里有单选组

[2018-7-25]问题描述:我在模型类的取回结果方法中,使用了if search_condition,如果选中了某个单选钮,就添加筛选条件,但是一直报错,说数据库不能getNone,判断逻辑代码类似:

        if outdoor : 
            t = OutdoorType.query.get(int(outdoor))
            activities = t.activities

经过排查发现,form.outdoor.data是str类型的,如果没有选中,这个值就是None,字面的None,不是空类型,代码改为:

        if outdoor != 'None': 
            t = OutdoorType.query.get(int(outdoor))
            activities = t.activities

使用bootstrap的row和col在模板页中左右布局,经常出现有的显示正常,有的“崩坏”右侧栏显示到新的row

记录被Bug和逻辑坑强势调戏的日子_第1张图片
bootstrap崩坏示意图

[2018-7-26]问题描述:同一个文章页面,时而正常时而崩坏,如图右侧导航蹦到新的row
解决方案:是由于html中写了很多{% if xxx %}等代码块,有的正好if开始块写在

内,if结束块写在了
外,所以最终生成的html可能造成左侧内容col布局被if块外侧的
给提前闭合了!,自然右侧的col布局就下来了

builtins.TypeError
TypeError: int() argument must be a string, a bytes-like object or a number, not 'method'

[2018-7-29]问题描述:报错如上总有自己做出来些傻逼Bug....自己给自己挖坑,这个就是,这个报错我调试了一个多小时...才发现自己多傻逼,然后今天一天一半时间都在调自己写的逻辑坑...
解决方案:会报这个错是因为我在模板HTML中链接中用了href="{{ url_for('team.activity_confirm', id=activity.unpaid_id) }}",然后这个view只接受int参数,所以构建模板的时候报错,我一直以为是sql写错了....
最后发现是...模型类里面的unpaid_id我写成了方法,而这里引用的是个属性....给模型类中的方法加上@property终于世界安静了...

@property
    def unpaid_id(self, user=current_user):
        return self.joins.filter_by(user_id=user.id, state=False).first().id

builtins.AttributeError
AttributeError: 'UnboundField' object has no attribute 'call'

builtins.AttributeError
AttributeError: 'ActivityJoinForm' object has no attribute '_fields'

【2018-7-29】问题描述:永远死在最简单的问题上...生成模板的时候一直报这俩个错
解决方案:自定义Form的__init__函数忘记调用 super()先让Form的__init__初始化form了...
另外调试中还发现一个小问题,就是我经常做判断的时候用如 if activity.solutions 这种语句,但是因为solutions是个relationship,是个sql对象,所以判断永远是True

AttributeError: 'str' object has no attribute 'data'

【2018-7-29】问题描述:我把form传到了model类中,来更新数据,出现了上面这个报错
解决方案:由于我的自定义模型类中属性名和form的一个字段名重名,所以报错,更改form的字段名即可。但是为啥我在模型类方法中用form.phone.data会报错呐?都限定着的,编译器为啥觉得这个phone是属性phone...想不明白
挂一个TODO

ValueError: unknown resampling filter

【2018-7-31】问题描述:我在用pillow扩展的时候报错
解决方案:我的错误代码是img=img.resize(w,h),这里参数错了,参数应该是个宽高的元组,img=img.resize((w,h)),另外需要注意的是Pillow中的好多方法都不是在原图上修改,都需要再赋值才能保存修改

AttributeError: 'Query' object has no attribute 'paginate'

[2018-8-1]问题描述:我要同时取两个Model的数据,一开始我用all()全取出来的时候没有问题,后来换成paginate就报错了
原始报错代码:

db.session.query(JoinActivity, ActivityContact).filter(
            JoinActivity.id==ActivityContact.join_id,
            JoinActivity.activity_id==activity_id).paginate(page)

这是因为使用db.session.query查询对象,背后用过得是sqlalchemy的query类,而 model.query使用的是flask-sqlalchemy的 BaseQuery类,这个类继承自query,添加了很多注入paginate()的辅助方法,所以这个查询会报错,如果想在db.session.query中实现分页,需要手动使用limit(),offset()方法,但是它又反不会Pagination对象....所以前端的分页也要重新做....总之是非常之麻烦的感觉,这个先放一放,我先用all(),回头再改成分页
挂一个TODO#2

502 bad gateway

【2018-8-6】问题描述:在最新一次服务器更新时,nginx显示502错误,nginx报错,就是后端服务器有错
解决方案:我这里是因为新安装了flask-mail扩展,但是服务器没有装。导致重启gunicorn的时候出错没启动,这里就不能再Kill -HUP了,需要新启动一个gunicorn

去掉所有链接鼠标划过的下划线

几多小的问题,但是我用了a:hover { text-decoration:none;}之后就是不管用!鼠标划过还是一直有下划线,看着好难受,只好提高优先级...来取消全站的链接下划线a:hover { text-decoration:none!important;}

RSA key format is not supported

【2018-08-11】问题描述:在使用Python-alipay-sdk包接入支付宝支付时,使用了app_secret_key_string初始化Alipay的时候,一直报错,一开始我以为是秘钥生成错了,就下载了Openssl重新生成秘钥,结果还是报这个错,查看了下包的源码,是RSA.importKey方法报错,然后我自己调用了下这个方法也是报错
解决方案:后来我试了下直接从Key文件里面导入秘钥

key_path=os.path.join(os.getcwd(), 'key','app_secret_key')
with open(key_path) as fp:
  key_string = fp.read()
RSA.importKey(key_string)

就正确显示了,但是因为我是直接输出到了HTML测试,又报错RsaKey is not callable,因为生成的是个RsaKey对象,str()了一下就在页面中显示了,所以在用python-alipay-sdk包的时候要使用app_secret_key_path,不要使用app_secret_key_string.

zTree插件不显示

【2018-8-22】问题描述:第一次接触zTree,然而页面一直不显示,检查了好多遍DEMO,完全不知道为啥$.fn.zTree.init($("#tree"), setting, zNodes);就是不运行
解决方案:我之前把引用ztree的Js写到里面了,改到scripts块就好了....应该是开始运行这行代码的时候,ztree还没有加载出来

UnicodeDecodeError: 'utf-8' codec can't decode byte 0xbc in position 0: invalid start byte

[2018-8-28]问题描述:换了个电脑部署开发环境,结果python manage.py runserver的时候报上述错误,python manage.py shell却没问题;同时pip安装包的时候也报了类似的UnicodeDecodeError错误
解决方案:计算机名有中文...把计算机名改成英文就可以runserver了;pip时报错的解决方案是:把python36文件夹下的lib\site-packages\pip\compat_init_.py文件中的return s.decode('utf-8')改成return s.decode('cp936'),这里需要注意一下搜索这个文件的utf-8有3处,只修改return s.decode('utf-8')这一处的编码方式,另外的不用修改!

UnicodeEncodeError: 'locale' codec can't encode character '\u5e74' in position 2: Illegal byte sequence

[2018-9-1]问题描述:将日期格式化显示的语句报错self.fill_date.strftime('%Y年%m月%d日')
解决方案:self.fill_date.strftime('%Y{y}%m{m}%d{d}').format(y='年',m='月',d='日')

你可能感兴趣的:(记录被Bug和逻辑坑强势调戏的日子)