一、类的魔法方法
1、__new__:类开始实例化时触发。
2、__init__:类实例化时触发,在__new__之后。
3、__str__:打印对象时触发。
4、__call__:定义在元类,类实例化时触发。
5、__del__:回收对象时触发。
6、__setattr__和__getattr__:点拦截方法,用点赋值/取值时会触发。
7、__setitem__和__getitem__:[]拦截方法,有[]赋值/取值时会触发。
8、__enter__和__exit__:上下文管理方法,上下文管理对象新建/结束时会触发。
9、__eq__:对象进行<==>比较时触发。
二、cookie,session,token
1、HTTP协议的特点:基于tcp/ip的请求/响应机制的应用层协议。
2、典型c/s架构程序:
①mysql:底层基于socket,自己封装的协议。
②navicat:c++编写的图形化界面的mysql客户端,实现了请求/响应协议。
③pymysql:用python语言实现的请求/响应协议。
④redis:底层基于socket,自己封装的协议。
⑤docker:基于http协议,使用restfull规范。
⑥elasticsearch:基于http协议,使用restfull规范。
3、cookie:把用户信息的键值对存储于本地浏览器,向服务端发送请求时,携带它过去,比较不安全。
4、session:把用户信息的键值对存储于服务端的任意可存储位置(内存,硬盘,数据库等),再返回特征码存储于本地浏览器,向服务器发送请求时,携带特征码去服务器对应用户信息,如果用户数量特别大,需要消耗大量服务器的存储资源。
5、token:把部分用户信息进行特征加密,再把密文与这些信息组合,存储于本地浏览器,向服务器发送请求时,携带组合码去服务器进行拆分再特征加密再组合,若得到与原组合码一致的结果,则验证通过。
6、JWT:json web token。
7、django中session的底层原理:在中间件中,请求走的时候,在process_response方法中,取出request.session的modify属性,判断是否是true,如果是true,表示在视图函数中修改过session,数据库同步修改,如果是false,就不修改,返回给前端sessionid:随机字符串。请求来了,通过sessionid,取出随机字符串--》去数据库中查--》把表的数据转成字典,赋值给request.session,后面视图函数中就可以操作它了。