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())