基础知识杂谈2

一、类的魔法方法

  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,后面视图函数中就可以操作它了。

原文地址:https://www.cnblogs.com/caoyu080202201/p/13220449.html