flask各种踩坑报错

flask报错"AssertionError: View function mapping is overwriting an existing endpoint function"

1.当我写完接口之后,准备运行启动文件,结果报错这个断言错误,当时去百度了,发现没有也没有找到我想要的答案,然后就自己看源码,后面仔细检查了下,原来是我注册了两遍视图函数的路由,user_api.add_resource(ChannelResource, '/channel'),于是我删除了一个后面就好了

 2.File"\flaskProject2\venv\lib\sitpackages\flask_restful\__init__.py", line 579, in dispatch_request for decorator in decorators:TypeError: 'function' object is not iterable,当时也不知道是哪里报错,后面自己断点的时候,发现没有走进我的断点之处,于是就想到我在这个函数之前加了一个装饰器,于是我就去检查装饰器,结果发现是method_decorates添加装饰器,后面那个函数没有写成[login_decorates],二是直接写成了login_decorates,于是我从新修改如下

method_decorators = {
    "patch": [login_decorates]
}

3.TypeError: "'instancemethod' object is not iterable"。

我是在查询数据库时候,出错的,当时后台只显示500错误,什么都没有,通过断点调试,看到这个错误信息,大致是查询数据库的时候,由于我查询的啥时候本来应该是

channels = Channel.query.options(load_only(Channel.id, Channel.name)).all()结果我发现后面的.all我少了个括号,结果就导致出现问题、

4.TypeError: <sqlalchemy.orm.attributes.InstrumentedAttribute object at 0x0000000005144938> is not JSON serializable,当时这个错误困扰挺久的,我当时从数据库拿到数据之后,然后就直接给序列化一个字典返回了,但是因为有些字段是默认值,于是我还需要去查询数据库,然后给赋值,当时是查到一个对象,需要的是直接把对象的某个属性赋值过去,本来查的对象是attitude,赋值应该是attitude.attitude,但是我直接赋值了这个Attitude这个类的.attitude,意思是直接把这个数据模型的这个字段的对象赋值了,所以导致后续在字典序列化的时候报错,因为字典里面含有某个对象,在python中能被json的对象是有dict,list,,str,以及数组。

5. 在定义了转换器语法的时候,传参是直接传的值,比如/user/unfowlling/1直接传值就好,而不是在params里面传参。不然就会报错404

6.TypeError: datetime.datetime(2018, 11, 29, 15, 3, 20) is not JSON serializable,,还是跟问题4一样,数据库拿出来的数据是datetime类型。我给赋值给字典里面作为某个value值,但是字典对象后面有被序列化为JSON,所以会报错,于是把时间类型转换为字符串类型,使用datetime.isoformat()。

7.踩到一个无敌巨坑,由于我使用的是Python2 ,当我把datetime类型转换为时间戳类型,我是直接使用datetime.timestamp()进行转换的,但是报错是没有这个属性的,后面查资料才知道

AttributeError:'datetime.datetime'对象没有'timestamp'属性 - 问答 - Python中文网

datetime.timestamp()被添加到Python 3.3中。

要在Python<;3.3上获得类似的行为,需要使用time.mktime()

import time

def to_seconds(date):
    return time.mktime(date.timetuple())

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值