1、 https 为什么比 http 更安全?
http --> 超文本传输协议 -- 应用层 --> 端口80 --> http协议不适合传输一些敏感信息,比如:信用卡号、密码等支付信息。
https --> 安全套接字层超文本传输协议 -- 传输层--> 端口443 --> 为了数据传输的安全,HTTPS在HTTP的基础上加入了SSL协议,SSL依靠证书来验证服务器的身份
2、format 格式化字符串的用法?
1.作为拼接字符串进行使用
'{}'.format(变量)
2.保留小数
'{:.2f}'.format(12.333) 保留小数点后两位
3.百分比格式
'{:.2%}'.format(0.333)
4.进制转换
'{0:x}'.format(20) 转换成十六进制
'{0:o}'.format(20) 转换成八进制
进制转换的时候用{0:进制}
5.对齐方式 '{a:<10}'.format(a=12.3,b=13.44) 左对齐,长度为10 '{a:0>10}'.format(a=12.3,b=13.44) 右对齐... '{a:0^10}'.format(a=12.3,b=13.44) 居中对齐... '{a:0<10}'.format(a=12.3,b=13.44) 数字补x (填充左边)
6.转义{和}符号
'{{ hello{0} }}'.format('python’)
f = ' hello {0} '.format
f('python’)
3、简述七层协议 每一层的作用
1.应用层 : 与其它计算机进行通讯的一个应用,它是对应应用程序的通信服务的
2.表示层 : 这一层的主要功能是定义数据格式及加密
3.会话层 : 它定义了如何开始、控制和结束一个会话
4.传输层 : 这层的功能包括是否选择差错恢复协议还是无差错恢复协议,
5.网络层 : 这层对端到端的包传输进行定义,它定义了能够标识所有结点的逻辑地址,还定义了路由实现的方式和学习的方式。
6.数据链路层 : 它定义了在单个链路上如何传输数据
7.物理层 : OSI的物理层规范是有关传输介质的特性,这些规范通常也参考了其他组织制定的标准
4、Django 中间件具体执行流程
执行流程:
1、浏览器发送请求
2、Django网站, 产生 request 对象
3、调用中间件类中的 process_request
4、url 的匹配(通过 URL 找对应的视图)
5、调用中间件类中的 process_view
6、调用我们自己的视图 view
7、调用中间件类中的 process_response
8、process_response 将响应内容 返回给浏览器
五个中间件的作用?
process_request: 是在产生 request 对象, 进行 url 匹配之前调用
process_view: 是 url 匹配之后, 调用视图函数之前调用
process_response: 视图函数调用之后, 内容返回给浏览器之前调用
process_exception: 视图函数调用之后, 内容返回给浏览器之前
如果注册的多个中间件类中包含 process_exception 函数的时候, 调用的顺序跟注册的顺序是相反的
1 进入Django中的请求都会执行process_request方法;
2 Django返回的信息都会执行process_response方法.;
5、有return 和 没有 return 的区别?
process_request方法不能有return,一定要使用return的时候,要配合条件判断语句执行
process_response方法一定要有return,否则程序会运行错误
process_view方法不能有return,否则视图函数不会执行
process_exception方法只有在程序出现运行错误的时候才会执行
process_exception方法设定return时,程序不会再执行后续中间件中的process_exception
process_template_response方法只有在视图函数中使用render方法返回信息的时候才会执行
6、Flask 框架第一天所学知识
- Flask 里面的参数意义?
name 以当前传入的模块路径为家目录
- 加载配置有几种?
1.从配置文件中加载 app.config.from_pyfile('config.cfg')
2.用类的方式加载 class Config(): DEBUG = True
app.config.from_pyfile((Config))
3.本身就是字典 适用于参数少的 app.config['DEBUG'] = True
- run里面参数的意义?
host='0.0.0.0' 任意一台电脑 port=5000 端口 debug=true
一个视图可以绑定多个路由
转换器就是为了匹配路由中的参数
转换器:
1.整数
@app.route('/center/<int:uid>')
def center(uid):
return 'your uid is {0}'.format(uid)
2.字符串
@app.route('/center1/<string:uid>')
def center1(uid):
return 'your uid is {0}'.format(uid)
3.float
@app.route('/center4/<float:uid>')
def center4(uid):
return 'your uid is {0}'.format(uid)
4.默认转换器
@app.route('/center2/<uid>')
def center2(uid):
return 'your uid is {0}'.format(uid)
5.path转换器
@app.route('/center3/<uid>')
def center3(uid):
return 'your uid is {0}'.format(uid)
自定义转换器
class MyConverter(BaseConverter):
# regex = r'd{5,10}'
regex = r'1[378]\d{9}'
def init(self,map,re):
super().init(map) # 让父类的init执行
self.regex = re