6.异常捕获
抛出异常:abort(状态码)
捕获异常:装饰器 app.errorhandler(参数) 参数可以是状态码 或者 指定类型的异常ZeroDivisionError(除数为零的异常)
@app.errorhandler(404)
def page_not_found(error):
return "咦~页面不见了~" return想让用户看到的界面
7.请求钩子
像钩子一样,在业务逻辑中,正常http交互之前或者之后用钩子抓出瞬间,添加功能 装饰器格式@app.before_first_request
比如:
7-1.before_first_request
在处理第一个请求之前
7-2.before_request
每次请求之前 可以对一些非法的请求进行阻止(黑名单)
7-3.after_request 处理响应
在执行完视图函数之后会调用,并且函数里面接受一个参数:响应,还需要将响应进行返回 比如:把格式改成["Content-Type"] = "application/json"
7-4.teardown 处理异常
在请求之后会执行,如果请求的函数报有异常,会把具体异常传入到此函数
8.装饰器路由核心逻辑 : 如何实现用装饰器把路由信息添加进去的
flask核心之一: Werkzeug工具集(Werkzeug实现路由、调试和Web服务器网关接口)
包含4大类 : request
response
routing
other
routing模块内部有:
Rule类: 路由URL规则 url_map
Map类: 存储所有的URL规则和一些配置参数(请求方式),容器
BaseConverter的子类: 负责定义匹配规则(自定义装饰器)
MapAdapter类: 实现视图函数 和 路由的对应 具体执行通过它来
9.获取请求参数(request类的操作)
方法: 注意获取的内容格式
data: 记录请求的数据,并转换为字符串
form: 记录请求中的表单数据
args: 记录请求中的查询参数
cookie: 记录请求中的cookie信息
headers: 记录请求中的报文头
method: 记录请求使用的HTTP方法
url: 记录请求的URL地址
files: 记录请求上传的文件
比如:获取上传的图片并保存到本地
@app.route('/', methods=['POST'])
def index():
pic = request.files.get('pic') post请求上传的是字典格式,这个'pic'是key值
pic.save('./static/aaa.png')
data = request.data
print(data)
return 'success'
10.状态保持 cookie 和 session
cookie:
make_response(响应内容)方法,是构造响应对象的,然后对它set,最后ruturn响应对象,才能既有cookie也有响应内容
设置:cookie是服务器先发给浏览器的,服务器永远是开始,在响应类中设置
response.set_cookie(key,value, max_age=失效时间ms ) 给响应对象setcookie
获取:服务器接收浏览器发过来的cookie,所以在requset对象中
request.cookies.get('user_id') 因为cookie是字典格式,通过key来获取
注销(了解): 因为还是服务器发给客户端,在response中delete
response.delete_cookie('key')
session: 注意:app.config['SECRET_KEY'] = 'fjkasdjfklasjdfl' 想要应用session需要设置一个密匙的配置 = '解密的规则一般是算法'
敏感、重要的信息,要存储在服务器端,不能存储在浏览器中
session依赖于cookie存在,session相当于办了一张健身卡,信息储存在服务器,给你一张卡,卡可以去服务器找信息,而这个卡的信息通过cookie储存
设置:session单独相当于对象,对它进行操作,就可以
session[key] = 'value' 具体session储存在哪,学习数据库就知道了,应该是框架中session对象中有个储存的地方
获取:
session.get('key','') 建议设置一个默认的none值,不存在也不报错
注销:(了解)
session.pop('key',None) 也建议设置默认值