目录
一、Flask上下文
1、请求上下文
2、应用上下文
例子1
例子2
二、蓝图
1、蓝图介绍
2、使用蓝图
三、Flask-RESTful
1、下载第三方模块
2、怎么使用
结果 四、装饰器
case_装饰器
case_装饰器
例子1
1、视图类添加
2、单方法添加
一、Flask上下文
1、请求上下文
request
封装了HTTP请求的内容, 针对的是HTTP请求.
请求的数据封装在request对象中, 比如查询参数, 文件数据等
session
session用来记录请求会话中的信息, 针对的是用户信息.
2、应用上下文
current_app 代表当前app app可以完成跨视图函数访问
g 全局的变量 但是不能跨视图函数访问
例子1
app.jiyun = "你好 积云"
@app.route("/count")
def do_home():
print("jiyun:{}".format(current_app.jiyun))
return "登录失败!"
request 封装了HTTP请求的内容, 针对的是HTTP请求. 请求的数据封装在request对象中, 比如查询参数, 文件数据等 session session用来记录请求会话中的信息, 针对的是用户信息.
2、应用上下文
current_app 代表当前app app可以完成跨视图函数访问
g 全局的变量 但是不能跨视图函数访问
例子1
app.jiyun = "你好 积云"
@app.route("/count")
def do_home():
print("jiyun:{}".format(current_app.jiyun))
return "登录失败!"
app.jiyun = "你好 积云"
@app.route("/count")
def do_home():
print("jiyun:{}".format(current_app.jiyun))
return "登录失败!"
结果
例子2
@app.route("/comment")
def do_comment():
print("g.msg=", g.msg)
@app.route("/error")
def do_error():
g.msg = "我是小兵张嘎"
print(g.msg)
return "我是小兵张嘎"
结果:结果:先执行error,后执行comment
二、蓝图
1、蓝图介绍
蓝图(blueprint):用于实现单个应用的视图、模板、静态文件的集合。
蓝图就是模块化处理的类。类似于django中app,子应用。
简单来说,蓝图就是一个存储操作路由映射方法的容器,主要用来实现客户端请求和URL相互关联的功能。 在Flask中,使用蓝图可以帮助我们实现模块化应用的功能。
flask中,将项目模块化,blueprint,是flask自带的一种开发模式,目的是为了方便开发大型的项目
2、使用蓝图
蓝图(blueprint):用于实现单个应用的视图、模板、静态文件的集合。 蓝图就是模块化处理的类。类似于django中app,子应用。 简单来说,蓝图就是一个存储操作路由映射方法的容器,主要用来实现客户端请求和URL相互关联的功能。 在Flask中,使用蓝图可以帮助我们实现模块化应用的功能。 flask中,将项目模块化,blueprint,是flask自带的一种开发模式,目的是为了方便开发大型的项目
2、使用蓝图
使用蓝图 3步走
app = Flask(__name__)
# 1、创建一个蓝图模板
main_blue = Blueprint("main", __name__)
# 2、 定义视图函数 使用蓝图配置路由
@main_blue.route("/")
def home():
return "欢迎来到2050年"
@main_blue.route("/login")
def login():
return "登录成功"
# 3、把蓝图 注册到 app上
app.register_blueprint(main_blue)
- 结果 注册蓝图的时候 参数
我们可以 添加 url_prefix 添加一个路由前缀,这样子 这个蓝图上的所有路由都有了这个前缀。
三、Flask-RESTful
1、下载第三方模块
pip install flask-restful
2、怎么使用
pip install flask-restful
2、怎么使用
flask-restful 引入了两个类 一个API类 一个是 Resource类
Resource类 用来定义视图类
API类 用来管理视图类
apps.book_blue
from flask_restful import Api, Resource
from flask import Blueprint, make_response, jsonify
book_blue = Blueprint("book", __name__)
api = Api(book_blue)
# 创建视图类
class Book(Resource):
def get(self):
resp = make_response("返回图书列表")
return resp
def post(self):
return jsonify({"msg": "添加图书成功"})
# 把这个视图类 配置一个路由
api.add_resource(Book, "/books")
restful
from flask import Flask from apps.book_blue import book_blue app = Flask(__name__) #注册蓝图 app.register_blueprint(book_blue, url_prefix="/my") if __name__ == "__main__": app.run()
结果 四、装饰器
case_装饰器
def checkInt(func):
def inner(x,y):
print("----函数执行前调用----")
return func(x, y)
return inner
@checkInt
def add(x, y):
return x + y
@checkInt
def mulit(x, y):
return x * y
print(add(3,10))
print(mulit(10, 20))
结果
case_装饰器
def checkInt(func): def inner(x,y): if isinstance(x, (int, float)) and isinstance(y, (int, float)): return func(x, y) else: return "非数字不能相加" return inner @checkInt def add(x, y): return x + y @checkInt def mulit(x, y): return x * y print(add(3,"a"))
结果
例子1
from flask_restful import Api, Resource
from flask import Blueprint, make_response, jsonify
book_blue = Blueprint("book", __name__)
api = Api(book_blue)
def checkIsNone(func):
def inner():
resp = func()
if resp.content_length > 0:
return resp
else:
return make_response("内容为空")
return inner
# 创建视图类
class Book(Resource):
method_decorators = [checkIsNone]
def get(self):
resp = make_response("")
return resp
def post(self):
return jsonify({"msg": "添加图书成功"})
# 把这个视图类 配置一个路由
api.add_resource(Book, "/books")
结果
1、视图类添加
Flask-Restful 框架 定义的 Resource视图类中 都有一个属性
method_decorators,可以在这里方法里声明 多个装饰器
这样子,会作用在 每一个视图类中的方法上。
from flask_restful import Api, Resource
from flask import Blueprint, make_response, jsonify
book_blue = Blueprint("book", __name__)
api = Api(book_blue)
def checkIsNone(func):
def inner():
resp = func()
if resp.content_length > 0:
return resp
else:
return make_response("内容为空")
return inner
def decorator2(func):
def wrapper(*args, **kwargs):
print('decorator2')
return func(*args, **kwargs)
return wrapper
# 创建视图类
class Book(Resource):
method_decorators = [checkIsNone, decorator2]
def get(self):
resp = make_response("")
return resp
def post(self):
return jsonify({"msg": "添加图书成功"})
# 把这个视图类 配置一个路由
api.add_resource(Book, "/books")
结果
2、单方法添加
我们也可以给每一个函数,进行单独的添加
from flask_restful import Api, Resource
from flask import Blueprint, make_response, jsonify
book_blue = Blueprint("book", __name__)
api = Api(book_blue)
def checkIsNone(func):
def inner():
resp = func()
if resp.content_length > 0:
return resp
else:
return make_response("内容为空")
return inner
def decorator2(func):
def wrapper(*args, **kwargs):
print('decorator2')
return func(*args, **kwargs)
return wrapper
# 创建视图类
class Book(Resource):
method_decorators = {
"get":[checkIsNone],
"post":[decorator2]
}
def get(self):
resp = make_response("")
return resp
def post(self):
return jsonify({"msg": "添加图书成功"})
# 把这个视图类 配置一个路由
api.add_resource(Book, "/books")
结果



