一,HTTP协议 HTTPS协议 不同 为什么安全?
(1)http协议是一种网络哟传输协议,规定了浏览器和服务器之间的通信方式。位于应用层(传输信息都是明文方式,不安全,容易被人拦截,篡改)
(2)为了通信安全,使用对称加密方式,
(在发送之前,使用相同的秘匙对数据进行加密和解密)(这种方式虽然在网络中是以密文呈现,但是容易让人拦截破解,也不算安全.)
(3)使用非对称加密方式,
非对称加密包含一组秘匙,公匙和私匙:明文可以用公钥加密,用私钥解密,并且只能用私钥解密,不能用公钥解密;也可以用私钥加密,公钥解密,并且只能有公钥解密。
流程如下
a、浏览器生成一个随机秘钥。
b、浏览器向服务器请求公钥。
c、服务器向浏览器发送它的公钥。
d、浏览器接收服务器发送的公钥,并使用公钥加密随机生成的对称加密秘钥,发送给服务器。
e、服务器接收浏览器发送的数据,用自身私钥解密,得到,对称加密秘钥。
f、至此,浏览器和服务器可以使用对称加密秘钥相互通信。
用这种方式仍然存在隐患,在进行第3步和第4步时候,中间人会在服务器放松公钥给浏览器时候,截取数据,把公钥修改成自己的发送给浏览器,这时浏览器就无法验证公钥的准确性.
(4)使用httos数字证书保证数据安全
数字证书是第三方机构,给网站唯一身份证明。
当浏览器请求公钥时,服务端不单单发送公钥,而是发送包含公钥的数字证书。
浏览器解密时如下:
a、首先查看是否在有效期内,若失效则不再发送随机对称秘钥;
b、找到第三方机构名称,通过对照找到第三发机构公钥,解密数字签名,得到一个hash1值。
c、通过同样的方式,根据服务端网址等信息,使用签名算法,生成hash2.
d、将hash1和hash2,对比,如果相同,则身份验证成功。
e、身份验证成功后,使用同样的机构公钥解密网站公钥。
f、浏览器使用解密后的公钥发送对称秘钥给服务端。
https的主体思想,ip模型上加了ssl层。
二,网络七层塔协议:
七层划分为:应用层、表示层、会话层、传输层、网络层、数据链路层、物理层。
物理层: 物理传输、硬件、物理特性(用于俩个硬件之间的通讯)
数据链接层: 定义了如何让格式化数据以进行传输,以及如何让控制对物理介质的访问。这一层通常还提供错误检测和纠正,以确保数据的可靠传输。
传输层: 发送大量数据的时候用,传输数据包(确保了数据的不丢包,但是速度较慢)
网络层: 即路由器,交换价那些具有寻址功能的设备所实现的功能。这一层定义的是IP地址,通过IP地址寻址。所以产生了IP协议。
会话层: 会话层的作用就是建立和管理应用程序之间的通信。
表示层: 解决不同系统之间的通信语法问题
应用层: 用户使用的都是应用程序,均工作于应用层,互联网是开发的,大家都可以开发自己的应用程序,数据多种多样,必须规定好数据的组织形式 。(主要功能:规定应用程序的数据格式。)
三,format的用法
(1)通过位置:
print'{0},{1}'.format('chuhao',20)
(2)通过关键字
print'{name},{age}'.format(age=18,name='chuhao')
class Person:
def__init__(self,name,age):
self.name = name
self.age = age
def__str__(self):
return 'This guy is {self,name},is {self,age} old' .fromat(self.self)
(3)通过映射list
a_list = ['chuhao',20,'china']
print'my name is {0[0]},from {0[2]},age is {0[1]}'.format(a_list)
######## my name is chuhao,from china,age is 20
(4)通过映射 dict
b_dict = {'name':'chuhao','age':20,'province':'shanxi'}
print'my name is {name}, age is {age},from {province}'.format(**b_dict)
(5)填充与对齐
print'{:>8}'.format('189')
###### 189
print'{:0>8}'.format('189')
##### 00000189
print'{:a>8}'.format('189')
##### aaaaa189
(6)精度与类型f
#保留两位小数
print'{:.2f}'.format(321.33345)
##### 321.33
(7)用来做金额的千位分隔符
print'{:,}'.format(1234567890)
#### 1,234,567,890
(8)其他类型 主要就是进制了,b、d、o、x分别是二进制、十进制、八进制、十六进制
print'{:b}'.format(18) #二进制 10010
print'{:d}'.format(18)#十进制 18
print'{:o}'.format(18)#八进制 22
print'{:x}'.format(18)#十六进制12
四、Django中间件 具体执行流程 有return和没有return区别
1、执行完所有的request方法 到达视图函数。
2、执行中间件的其他方法
3、经过所有response方法 返回客户端
如果其中一个中间件里request方法里return了值,就会执行当前中间件的response方法,然后返回给客户 然后报错,不会执行下个中间件
列如:
MIDDLEWARE = [
#注意CorsMiddleware要配置在CsrfViewMiddleware前
'corsheaders.middleware.CorsMiddleware',
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
]
五、Flask今天的所学知识点
1,Flask框架属于轻量级框架,只提供最核心的功能.
2,运用flask框架时候
from flask import Flask
'''
__name__:表示当前的模块名字
创建Flask对象,Flask会以传入模块的位置当做家目录
'''
app = Flask(__name__)
@app.route('/') # 代表首页
def hello_world(): # 视图函数
return 'Hello World!' # 返回内容
if __name__ == '__main__':
app.run() # 运行程序
浏览器地址:127.0.00.1:5000
3,flask参数
(1)a, # 配置文件
app.config.from_pyfile('config.cfg')
b, 配置DEBUG参数时候三种方式
字典配置 app.config["DEBUG"] = True
对象上配置 app.debug = True
参数传入配置 app.run(debug=True)
(2)取参时候:
函数中取时:
app.config.get('THST')
current_app.config.get('THST')
函数外:
app.config["TEST"] = 'test'
4,配置路由
1,只需要在函数的装饰器写入
@app.route('/center')
2,重定向
return redirect(url_for('index'))
3,需要定义请求方式的时候(mtehods里面加入允许的请求方式)
@app.route('/login',methods=['POST'])
5,转换器
default: 接受字符串,默认转换器
stirng: 接受字符串,跟默认一样
int: 接受整数
float: 同 int ,但是接受浮点数
uuid: 唯一识别码
path: 和默认的相似,但也接受斜线
用到时候代码如下:
#整数形式,要想改变请求地址中center/后面的参数只需要改变int改为自己允许的形式就好(上面)
@app.route('/center/
def center(uid): # 视图函数
return 'your uid %s' % uid # 返回内容
请求地址:127.0.00.1:5000:center/1
(2)优化转换器(代码如下)
from werkzeug.routing import BaseConverter
#自定义转换器
class MyConverter(BaseConverter):
def __init__(self, map, re):
super().__init__(map) # 调用父类
self.regex = re # 转换器的正则规则
app.url_map.converters['re'] = MyConverter # 注册
@app.route('/center/
return 'your uid %s' % uid # 返回内容
@app.route('/login/
def login(phone): # 视图函数
return 'your phone %s' % phone # 返回内容