自定义异常
"""
abort(code):主动抛出异常状态码
参数code:HTTP的错误状态码
例如:abort(404)
errorhandler(code_or_exception):用来监听捕捉异常,然后返回自定义的页面处理
参数:code_or_exception – HTTP的错误状态码或指定异常
场景: 二者配合使用,自定义异常页面
"""""
@app.route('/<int:age>')
def play_game(age):
if age > 18:
return "可以享受成年人的待遇啦!"
elif age >15:
raise Exception("快要成年啦!")
else:
abort(404)
return "hello world"
#捕捉异常并且处理
@app.errorhandler(404)
def error(e):(这里的e接收的是异常状态信息,且必须设置接收)
return "快快长大吧!"
@app.errorhandler(Exception)
def error2(e):
print(e)
return "服务器出现错误了"
状态码
直接返回响应体的同时设置状态码
1. 直接返回, 响应体 + 状态码
return "hello",888
2. 手动创建响应体对象
response =make_response(响应体内容)
response.status = "888"
return response
请求钩子
请求钩子是通过装饰器来实现的,flask支持四种请求钩子:
1.before_first_request:在处理第一个请求前执行,只有第一次访问的时候才执行,适合做:初始化操作,数据库的链接和表的创建。
@app.before_first_request
- before_request :在每次请求前执行,在该装饰器函数中一旦return视图函数不在执行。适合对请求参数做校验,访问统计。
@app.before_request
def before_request():
#获取请求参数
token = request.args.get("token")
#进行解密之后,值是否登陆123, 证明非法请求,校验请求参数
if token == "123":
return "非法请求,你是坏蛋"
- after_request :如果没有抛出错误,在每次请求后执行,接收一个参数,视图函数做出响应,适合做数据类型的统一设置。
@app.after_request
def after_request(resp):
print("after_request")
resp.headers["Content-Type"] = "application/json"
return resp
- teardown_request:在每次请求销毁后执行,接收一个参数:用来接收错误信息服务器内部记录异常信息
@app.teardown_request
def teardown_request(e): print(e)
request
request请求对象,里面封装了浏览器请求的所有参数信息
request.data: 获取的是浏览器提交的json数据
request.form: 获取浏览器提交的表单数据
request.cookies: 拿到浏览器中所有的cookie
request.headers: 获取到浏览器所有请求头信息
request.method : 获取浏览器请求方式
request.url: 获取请求路径
request.files: 获取浏览器传递的文件, 一般是input标签中的type=file
request.args: 获取地址中问号后面的参数
print(request.args.get("name10"))# 以后都使用这个方法,如果有值去对应的值,如果没值返回None
指定请求方式:
如果给视图函数指定请求方式
格式: @app.route("路径",methods=[方式1,方式2])
常见请求方式: GET,POST,PUT,DELETE
注意点: 如果不指定,默认是GET请求
app.run的参数
可以指定运行的主机IP地址,端口,是否开启调试模式
app.run(host="0.0.0.0", port=5000, debug = True)
url_map: 可以查看当前应用程序绑定了哪些路由路径,和视图函数之间的映射关系
格式: app.url_map, 返回的是map集合,里面存放着所有的路由表
Cookie:
cookie:用来记录服务器和浏览器的交互记录,由服务端设置,存储浏览器
设置方式(key value必须为双引号)
response = make_response(“这里的内容显示在页面”)
response.set_cookie(key,value,max_age)
max_age: 有效时间,如果不设置,默认就是一次浏览器会话结束
获取方式:
value = request.cookies.get(key)
session:
用来保存客户端和服务器重要的交互数据,由服务端创建,存储在服务器
设置方式:
session[key] = value
获取方式:
value = session.get(key)
删除方式:
sesssion.pop(key)
del session[key]
注意点:
1.session的存储依赖于cookie,将sessionID存储到浏览器
2.sessionID由于存在浏览器需要加密,设置SECRET_KEY
app.config["SECRET_KEY"] = "fhdk^fk#djefkj&*&*&"
3.具体内容存在服务器
请求上下文
request: 和每个请求相关,封装的每次请求相关的数据
session: 和每个用户相关(浏览器),里面存储的是用户的敏感信息
应用上下文:
current_app: app的代理对象,在模块开发中可以获取到app所有的配置信息
g: 在一次完成的请求中有效,可以使用g对象做登陆装饰器,封装用户数据
g 作为 flask 程序全局的一个临时变量,充当者中间媒介的作用,我们可以通过它传递一些数据,g 保存的是当前请求的全局变量,不同的请求会有不同的全局变量,通过不同的thread id区别
注意:不同的请求,会有不同的全局变量
请求上下文:保存了客户端和服务器交互的数据
应用上下文:flask 应用程序运行过程中,保存的一些配置信息,比如程序名、 数据库连接、应用信息等
flask_script: 扩展包
作用:
1.动态运行程序,可以在终端运行传入参数
2.配合flask_migrate做数据库迁移
如何使用:
1. 安装,导入Manager类
2. 使用Manager管理app
3. 启动: python xxx.py runserver -h IP地址 -p port端口
from flask_script import Manager
manager = Manager(app)
manager.run()