如下例子,所有的代码都写在一个文件中server.py。
# server.py
# __author__ = "laufing"
from flask import Flask, request, jsonify, send_file, render_template
app = Flask(__name__)
app.config.from_object("settings") # 项目下自动搜索settings.py配置
# 配置路由
@app.route("/index", methods=["GET"])
def index():
# 渲染模板自动到templates目录下去找
return render_template("index.html", name="首页", param1="xxx") # 给页面传参数
@app.route("/user/index", methods=['GET', "POST", "PUT", "DELETE"])
def user_index():
if request.method == "GET": # http://localhost:5050/user/index?name=jack&age=30 测试地址
data = request.args
# 渲染模板自动到templates目录下去找
return render_template("user/index.html",
name=data.get("name") if data.get("name") else "laufing",
age=data.get("age") if data.get("age") else str(25))
elif request.method == "POST": # 测试地址 post /user/index
data = request.form
return jsonify({
"name": data.get("name"),
"age": data.get("age")
})
elif request.method == "PUT":
return "更新"
else:
return "删除"
if __name__ == '__main__':
app.run(host="localhost", port=5050, debug=True)
在user_app目录下创建一个user_app.py,内部实现蓝图应用。
# __author__ = "laufing"
from flask import Blueprint, request, jsonify, render_template
# 开发restful api
from flask_restful import Api, Resource, reqparse
# 创建蓝图 应用
user_app = Blueprint("user", __name__, static_folder="static", template_folder="tempaltes/user")
# 当前user应用可以开发rest api
api = Api(user_app)
# 解析请求的参数
parser = reqparse.RequestParser()
parser.add_argument("name", type=str, required=False) # 类型 str 非必须
parser.add_argument("age", type=int, required=False, action="store", location=["args", "form"])
# action表示同名参数的处理方式
# location表示参数的位置
# 定义视图
class UserResource(Resource):
def get(self):
# 解析查询参数
data = parser.parse_args()
if "name" in data:
name = data.get("name")
else:
name = "laufing"
if "age" in data:
age = data.get("age")
else:
age = 23
return render_template("user/index.html", name=name, age=age)
def post(self):
# 解析post 提交的数据
data = parser.parse_args()
name = data.get("name") if data.get("name") else "post:laufing"
age = data.get("age") if "age" in data else 23
return jsonify({
"name": name,
"age": age
})
def put(self):
return "更新"
def delete(self):
return "删除"
# 添加视图、路由
api.add_resource(UserResource, "/index") # 这里是蓝图内部的部分地址
在app.py中注册user_app蓝图,实现如下:
#
# __author__ = "laufing"
from flask import Flask, request, jsonify, send_file, render_template
from flask_example.user_app.user_app import user_app
app = Flask(__name__)
# 注册蓝图
app.register_blueprint(user_app, url_prefix="/user") # url_prefix 路由前缀
@app.route("/index")
def index():
# 渲染模板自动到templates目录下去找
return render_template("index.html", name="首页")
if __name__ == '__main__':
app.run(host="localhost", port=5050, debug=True)
对于/user/index地址,当路由匹配到/user则请求进入user_app蓝图中,继续匹配剩余的部分。