服务端: import socket phone=socket.socket(socket.AF_INET,socket.SOCK_STREAM) # 买电话 phone.bind(('127.0.0.1',8081)) #插手机卡,补充:0-65535 0-1024给系统用的 phone.listen(5) # 开机 print('start...') conn,client_addr=phone.accept() # 等电话连接 print('连接来了:',conn,client_addr)…
一.套接字工作流程 一个生活中的场景.你要打电话给一个朋友,先拨号,朋友听到电话铃声后提起电话,这时你和你的朋友就建立起了连接,就可以讲话了.等交流结束,挂断电话结束此次交谈. 生活中的场景就解释了这工作原理. 先从服务器端说起.服务器端先初始化Socket,然后与端口绑定(bind),对端口进行监听(listen),调用accept阻塞,等待客户端连接.在这时如果有个客户端初始化一个Socket,然后连接服务器(connect),如果连接成功,这时客户端与服务器端的连接就建立了.客户端发送数据…
一.套接字UDP udp是无链接的,先启动哪一端都不会报错 UDP(user datagram protocol,用户数据报协议)是无连接的,面向消息的,提供高效率服务.不会使用块的合并优化算法,, 由于UDP支持的是一对多的模式,所以接收端的skbuff(套接字缓冲区)采用了链式结构来记录每一个到达的UDP包,在每个UDP包中就有了消息头(消息来源地址,端口等信息),这样,对于接收端来说,就容易进行区分处理了. 即面向消息的通信是有消息保护边界的.   服务器 #服务器 ss = socket…
Django之路由系统   Django的路由系统 Django 1.11版本 URLConf官方文档 URL配置(URLconf)就像Django 所支撑网站的目录.它的本质是URL与要为该URL调用的视图函数之间的映射表. 你就是以这种方式告诉Django,对于这个URL调用这段代码,对于那个URL调用那段代码. URLconf配置 基本格式: from django.conf.urls import url urlpatterns = [ url(正则表达式, views视图函数,参数,别…
Django模板语言相关内容   Django模板系统 官方文档 常用语法 只需要记两种特殊符号: {{  }}和 {% %} 变量相关的用{{}},逻辑相关的用{%%}. 变量 {{ 变量名 }} 变量名由字母数字和下划线组成. 点(.)在模板语言中有特殊的含义,用来获取对象的相应属性值. 几个例子: view中代码: def template_test(request): l = [11, 22, 33] d = {"name": "alex"} class P…
昨天内容回顾: 1.迭代器 可迭代对象: 只要内置有__iter__方法的都是可迭代的对象 既有__iter__,又有__next__方法 调用__iter__方法==>得到内置的迭代器对象 调用__next__方法==>得到下一个值 for 循环机制 for item in 可迭代对象: pass   先调用对象的__iter__方法得到迭代器,再调用__next__方法,取出下一个值 优点 : 提供了一种不依赖索引的取值方式 同一时间在内存中只存在一个值,节省内存空间 缺点: 取值麻烦 一…
一.包 #官网解释 Packages are a way of structuring Python's module namespace by using "dotted module names" 包是一种通过使用'.模块名'来组织python模块名称空间的方式. #具体的:包就是一个包含有__init__.py文件的文件夹,所以其实我们创建包的目的就是为了用文件夹将文件/模块组织起来 #需要强调的是: 1. 在python3中,即使包下没有__init__.py文件,import…
一. 异常 1.什么是异常 异常是错误发生的信号,程序一旦出错,如果程序中还没有相应的处理机制 那么该错误就会产生一个异常抛出来,程序的运行也随之终止 2.一个异常分为三部分: 1.异常的追踪信息 2.异常的类型 3.异常的值 3.异常的分类: 1.语法异常: 这类异常应该在程序执行前就改正 print('start....') x=1 x+=1 if print('stop....') 2.逻辑上的异常 #TypeError:int类型不可迭代 for i in 3: pass #ValueE…
一.继承 什么是继承:   继承是一种新建类的方式,在python中支持一个子类继承多个父类   新建类称为子类或派生类   父类可以称之为基类或者超类   子类会遗传父类的属性 2.  为什么继承 减少代码冗余 3. 定义方式: class Parent: pass class SubClass(Parent): pass print(SubClass.__bases__) #查看类的父类 4.  继承,调用父类方法以及self class Foo: def f1(self): print('…
1.类的定义 #类的定义 class 类名: 属性='xxx' def __init__(self): self.name='enon' self.age=18 def other_func: pass 在定义类的时候,类内的代码就已经执行了 在定义类时需要在类内定义一个叫__init__的函数,该函数在调用时才会执行 self是位置参数,用于在调用函数时接受传入的第一个参数,该参数为调用此方法的object本身 #类的实例化==>对象 #1. 若类内部没有设置__init__方法,则生成对象时…
1.XML模块 xml是实现不同语言或程序之间进行数据交换的协议,跟json差不多,但json使用起来更简单,不过,古时候,在json还没诞生的黑暗年代,大家只能选择用xml呀,至今很多传统公司如金融行业的很多系统的接口还主要是xml. xml的格式,就是通过<>节点来区别数据结构的 xml协议在各个语言里的都 是支持的,在python中可以用以下模块操作xml: # print(root.iter('year')) #全文搜索 # print(root.find('country')) #在…
一.数据库介绍 1.数据库相关概念 数据库服务器(本质就是一台计算机,该计算机之上安装有数据库管理软件的服务端) 数据库管理系统RDBMS(本质就是一个C/S机构的套接字软件) 库(文件夹)===>数据库 表(文件) 记录:抽取一个事物的所有典型特征/数据  ,说白了就是一条数据 eg:  egon,18,180,male,True 数据 name='egon' age=18 height=180 sex="male" beutiful=True 2.数据库管理系统 / 软件分类…
一.socketserver SocketServer简化了网络服务器的编写. 它有4个类:TCPServer,UDPServer,UnixStreamServer,UnixDatagramServer.这4个类是同步进行处理的,另外通过ForkingMixIn和ThreadingMixIn类来支持异步. 创建服务器的步骤: 1.首先, 必须创建一个请求处理类,它是BaseRequestHandler的子类并重载其handle()方法. 2.其次, 必须实例化一个服务器类,传入服务器的地址和请求…
IO模型 1.阻塞IO 2.非阻塞IO 3.多路复用IO 4.异步IO 一.阻塞IO blocking IO的特点就是在IO执行的两个阶段(等待数据和拷贝数据两个阶段)都被block了. 实际上,除非特别指定,几乎所有的IO接口 ( 包括socket接口 ) 都是阻塞型的. 所谓阻塞型接口是指系统调用(一般是IO接口)不返回调用结果并让当前线程一直阻塞,只有当该系统调用获    得结果或者超时出错时才返回. 在linux中,默认情况下所有的socket都是blocking,一个典型的读操作流程大…
JavaScript概述 ECMAScript和JavaScript的关系 1996年11月,JavaScript的创造者--Netscape公司,决定将JavaScript提交给国际标准化组织ECMA,希望这门语言能够成为国际标准.次年,ECMA发布262号标准文件(ECMA-262)的第一版,规定了浏览器脚本语言的标准,并将这种语言称为ECMAScript,这个版本就是1.0版. 该标准一开始就是针对JavaScript语言制定的,但是没有称其为JavaScript,有两个方面的原因.一是商…
一.外键foreign key    外键约束: 1.必须先创建被关联表才能创建关联表 2.插入记录时,必须先插入被关联表的记录,才能插入关联表(要用到被关联表)的记录 3.若不设置同步更新和同步删除,更新和删除都会受到限制 #表类型必须是innodb存储引擎,且被关联的字段,即references指定的另外一个表的字段,必须保证唯一 create table department( id int primary key, name varchar(20) not null )engine=in…
一.封装之property @property把一个函数伪装成一个数据类型  @伪装成数据的函数名.setter   控制该数据的修改,修改该数据时触发 @伪装成数据的函数名.delect  控制该数据的删除,删除该数据时触发 class People: def __init__(self,name): self.__name=name @property #将name()函数伪装成一个数据属性name def name(self): #obj.name print('您现在访问的是用户名...…
Web框架本质及第一个Django实例   Web框架本质 我们可以这样理解:所有的Web应用本质上就是一个socket服务端,而用户的浏览器就是一个socket客户端. 这样我们就可以自己实现Web框架了. 半成品自定义web框架 import socket sk = socket.socket() sk.bind(("127.0.0.1", 80)) sk.listen() while True: conn, addr = sk.accept() data = conn.recv(…
1.序列化和反序列化 我们把对象(变量)从内存中变成可存储或传输的过程称之为序列化,在Python中叫pickling. 反过来,把变量内容从序列化的对象重新读到内存里称之为反序列化,即unpickling. 为什么要保持序列化?   1.持久化状态 2.跨平台数据交互 各种语言之间,实现数据相互转换 2.json.eval.pickle eval()虽然也能进行数据提取,但是,eval()只能识别python 定义的数据类型,用来做序列化不具有跨平台型 Json的使用 x="[1,2,true…
1. 列表生成器 l=['egg%s' %i for i in range(100) if i>20 ] print(l) 若将 [ ] 换成 ( ),则为生成器表达式,结果是一个迭代器 #求文件中每行字符数的最大值 with open('E:\\test.txt','r',encoding='utf-8') as f : num=[len(line) for line in f] print(max(num)) 2. 模块 模块就是一系列功能的集合体,一个.py文件就是一个模块 #模块导入格式…
1. jQuery是什么?是一个轻量级的,兼容多浏览器的JS库(write less, do more) 1. 是一个工具,简单方便的实现一些DOM操作 2. 不用jQuery完全可以,但是不明智. 3. jQuery能做的事儿 1. 查找标签 2. 修改样式 3. 事件 4. AJAX (Django中讲) 5. 插件机制 4. jQuery是一个类库,类似于Python中的模块 A.使用时将相关文件(.js)拖进html文件中 <script src="jquery-3.3.1.min…
一.DBUtils模块 介绍 The DBUtils suite is realized as a Python package containing two subsets of modules, one for use with arbitrary DB-API 2 modules, the other one for use with the classic PyGreSQL module. The dependencies of the modules in the universal…
一.视图 1.什么是视图 视图就是通过查询得到一张虚拟表,然后保存下来,下次用的直接使用即可 2.为什么要用视图 如果要频繁使用一张虚拟表,可以不用重复查询 3.如何用视图 create view teacher2course asselect * from teacher inner join course on teacher.tid = course.teacher_id; drop view teacher2course; 强调1.在硬盘中,视图只有表结构文件,没有表数据文件2.视图通常…
一.GIL:全局解释器锁 1 .GIL:全局解释器锁 GIL本质就是一把互斥锁,是夹在解释器身上的, 同一个进程内的所有线程都需要先抢到GIL锁,才能执行解释器代码 2.GIL的优缺点: 优点:  保证Cpython解释器内存管理的线程安全 缺点:同一进程内所有的线程同一时刻只能有一个执行,也就说Cpython解释器的多线程无法实现并行 二.GIL与多线程 有了GIL的存在,同一时刻同一进程中只有一个线程被执行 听到这里,有的同学立马质问:进程可以利用多核,但是开销大,而python的多线程开销…
一.进程队列补充-创建进程队列的另一个类JoinableQueue JoinableQueue同样通过multiprocessing使用. 创建队列的另外一个类: JoinableQueue([maxsize]):这就像是一个Queue对象,但队列允许项目的使用者通知生成者项目已经被成功处理.通知进程是使用共享的信号和条件变量来实现的. 参数介绍:     maxsize是队列中允许最大项数,省略则无大小限制.   方法介绍:     JoinableQueue的实例p除了与Queue对象相同的…
一.反射 下述四个函数是专门用来操作类与对象属性的,如何操作? 通过字符串来操作类与对象的属性,这种操作称为反射 class People: country="China" def __init__(self,name): self.name=name def tell(self): print('%s is aaa' %self.name) obj=People('egon') 1.hasattr print(hasattr(People,'country')) print('cou…
1.hashlib  1.什么叫hash:hash是一种算法,该算法接受传入的内容,经过运算得到一串hash值 2.hash值的特点是:2.1 只要传入的内容一样,得到的hash值必然一样=====>要用明文传输密码文件完整性校验2.2 不能由hash值返解成内容=======>把密码做成hash值,不应该在网络传输明文密码2.3 只要使用的hash算法不变,无论校验的内容有多大,得到的hash值长度是固定的 import hashlib m=hashlib.md5() m.update('h…
1. 内容回顾 1. 基础必会三件套 from django.shortcuts import HttpResponse, render, redirect - HttpResponse("响应体内容") - render(request, "login.html",{"k": "v"}) --> 打开一个文件,把文件的内容读取出来 - redirect("具体的网址") --> 回复一个让浏览…
1. 操作样式     对CSS类的操作: addClass();// 添加指定的CSS类名. removeClass();// 移除指定的CSS类名. hasClass();// 判断样式存不存在 toggleClass();// 切换CSS类名,如果有就移除,如果没有就添加. CSS css("color","red")//DOM操作:tag.style.color="red" 示例: $("p").css("c…
1.  装饰器的原理以及为什么要使用装饰器 在代码运行期间动态增加功能的方式,称之为"装饰器"(Decorator). 在不影响原代码结构的情况下为其添加功能 2.  装饰器的基本用法 def test(func): def warpper(*args,**kwargs): print("====start====") func(*args,**kwargs) print("=====end====") return warpper @test…