补充:
面向对象三大特性:封装,继承,多态

from json import JSONEncoder,JSONDecoder import json from datetime import datetime,date res = {'c1':datetime.today(),'c2':date.today()} # a = datetime.today() # 有time 就是年月日 时分秒 # b = date.today() # 没有就是 年月日 # print(a) # print(b) print(json.dumps(res))

# 出现报错 TypeError: Object of type 'datetime' is not JSON serializable # 想可以得到序列化内容 # 在用dumps序列化=时 注意cls参数 如果不设置,则默认使用 JSONEncoder # json.JSONEncoder 查看default方法 # self 为对象本身 o 为传入的对象 class MyJson(JSONEncoder): def default(self, o): if isinstance(o,datetime): # 格式化时间 return o.strftime('%Y-%m-%d %X') elif isinstance(o,date): return o.strftime('%Y-%m-%d') else: return super().default(self,o) res = {'c1':datetime.today(),'c2':date.today()} print(json.dumps(res,cls = MyJson))

To extend this to recognize other objects, subclass and implement a ``.default()`` method with another method that returns a serializable object for ``o`` if possible, otherwise it should call the superclass implementation (to raise ``TypeError``). 若要将其扩展到识别其他对象,请子类化并实现a 方法和另一个返回可序列化的方法 对象(如果可能的话),否则它应该调用超类 实现(引发' ' TypeError ' ')。

在普通类中 ,在调用对象时自动执行,(既对象加括号) 在元类中,当你调用类对象时会自动调用元类中的__call__方法 ,并将这个类本身作为第一个参数传入,以及后面的一堆参数 覆盖元类中的call之后,这个类就无法产生对象,必须调用super().__call__来完成对象的创建 ,并返回其返回值 使用场景: 当你想要控制对象的创建过程时,就覆盖__call__方法 当你想要控制类的创建过程时,就覆盖__init__方法
### 网络编程 :编写基于网络应用程序的过程 ### 软件开发架构 c/s client /server 客户端/服务端 b/s browser/server 浏览器/服务器 b/s 架构本质也是c/s架构 服务端:24小时不间断的提供服务 客户端:随时都可以访问数据
两台计算机要想通讯,必须要具备两个基本要素 1.物理连接介质,包括网线,无线电,光纤等 2.通讯协议
OSI: open System Interconnection Reference Model,开放式系统互联通信参考模型
OSI七层模型 应用层 表示层 会话层 传输层 网络层 数据链路层 物理层
OSI五层模型 应用层 传输层 网络层 数据链路层 物理层
基于电信号传输010101 的二进制数剧
1.规定电信号的分组方式 2.规定了任何一台接入互联网的计算机都必须有一个网卡 每一块网卡上都刻有世界上唯一的12位16进制数 前6 位是厂商编号 后6 位是流水线编号 12位数称之为mac地址 以上俩点合称为'以太网协议 基于以太网协议通信 不能跨局域网通信 基于以太网协议通讯的特点: (广播,单播) 广播的方式进行通信,即通信基本靠吼
广播带来的缺点:广播风暴
局域网是有N多个局域网彼此之间连接而成的
IP协议
IP协议 规定了只要是接入互联网的计算机都必须有一个IP地址 ip地址特点:点分十进制 ip地址最小:0.0.0.0 ip地址最大:255.255.255.255 ip地址目前有两个版本:IPV4 IPV6(由于IPV4已经不够表示目前存在的计算机了 所以推出了IPV6版本) IP地址是动态分配的
TCPUDP 基于端口工作的协议
计算机与计算机之间其实是计算机上的应用程序与应用程序之间的通信
端口(port) 端口是需要联网的应用程序与网卡关联的编号,用来唯一标识一台计算机上的某个应用程序
端口号的范围:0~65535 注意:0~1023这些都是操作系统默认使用的端口号 建议:使用8000之后的端口 MySQL默认端口:3306 Redis默认端口:6379 django默认端口:8000 flask默认端口:5000 Tomcat默认端口:8080
小结:
ip地址:用来唯一标识接入互联网的一台计算机 port端口:用来唯一标识一台计算机上的某个应用程序
ip+port:唯一标识接入互联网一台计算机上的某个应用程序
HTTP协议
PTP协议
又称流式协议,可靠协议
基于TCP协议通信 必选先建立双向通道
tcp之所以可靠的原因在于是因为它有双向通道? 不对 可靠的原因 有反馈机制-----发送信息后对方必须回复确认收到信息才会将数据从内存中清空 如果一段时内没有收到回复信息,会自动重新发送,如果重试的次数过多则表示链接可能已经中断! 发送信息后要得到对方的一个反馈信息
出现的问题:
洪水攻击:服务器在同一时间接受大量的请求
三次握手四次挥手
三次握手建立连接
四次挥手断连接
中间不能合并:思考 服务端检测是否还有未发完的数据
星轨:明星出轨能抗住的压力