目录
可变类型与不可变类型
可变类型:列表,字典,集合
不可变类型:字符串,元组,整型,浮点型
常用的魔法方法
python中的魔法方法,定义在类中的一些__开头的方法,在某种情况下会自动触发
__init__:类加括号产生对象,对对象进行初始化的时候触发
__new__:类加括号产生对象,调用元类中的__new__产生一个空对象,这个方法有返回值,再触发__init__对对象进行初始化
__call__:对象加括号的时候自动触发
__getattr__:对象点一个不存在的属性的时候自动触发
__setattr__:对象点属性等于一个值的时候自动触发
__getitem__:对象['属性'],属性不存在的时候自动触发
__setitem__:对象['属性']=值的时候自动触发
上下文管理器:只要重写了__enter__和__exit__方法,就具备这个能力
with 对象 as xx:
1.写了一行行代码,这个时候就自动触发__enter__
2.上下文结束,这里写了一行代码,触发__exit__,做一些资源清理工作
类中的装饰器
-classmethod:绑定给类的方法,类调用的时候会直接将类作为第一个参数传入,对象也可以调用,对象在调用的时候会将产生对象的类,作为第一个参数传入
-staticmethod:类中定义的静态方法,类或者对象调用的时候有几个参数传几个参数
-没有写装饰器的方法,是绑定给对象的方法,对象在调用的时候会把对象作为第一个参数传入
-propty:把方法伪装成属性,这样调用这个方法的时候直接调名字就可以,不用加括号
-类中隐藏方法或者属性:__属性,__方法,但是大家统一默认隐藏写一个_就可以了
双写一致性
出现原因:因为有些接口访问的次数比较频繁,如果每次方法接口都要查询数据库,那么对资源来说是一种浪费也比较占用数据库资源,特别是当并发比较高的时候会造成数据库的崩溃,所以这些接口访问的资源我们可以放到redis缓存数据库中,每次访问这个接口资源直接去redis缓存数据库中拿就可以啦,但是这样如果我们对mysql数据库进行数据的新增或者删除,而接口访问的是redis数据库,这样就会有一个数据的误差
解决办法:
1.定时更新redis缓存数据库
2.修改数据后,删除缓存数据
3.修改数据,更新缓存
我们使用的是使用celery开启一个定时任务来进行数据的更新,虽然会有一定的延迟性,但是对于图片的接口影响不会太大
断点续传
上传途中如果中断会在本地生成一个保存中断位置的文件,下次上传的时候直接读取中断位置文件基于该位置继续上传
内网穿透
内网穿透,即内网映射,内网ip端口映射到公网,让外网访问内网的实现
可以采取的办法:
开源的:frp,ngrok
收费的:花生壳,神卓互联