flask_二、简单应用(请求说明+钩子函数)
简单应用实例
一、app.py文件内容
app.py文件内容 from flask import Flask, request import flask app = Flask(__name__) @app.route("/hello/") def hello(): name = request.args.get('name', 'flask') # 获取查询参数name的值 return '<h1>Hello,%s<h1>' % name # 替换到返回值中 if __name__ == '__main__': # with app.test_request_context(): # 上下文管理 # print("url_for('hello_world1'): %s" % url_for('hello_world1')) app.run(debug=True)
1.1说明:
request.args.get('name', 'flask')中:
“flask”是一个end值
,从args找到了属性值,就去找name,找不到就默认用flask返回
1.2运行结果
http://127.0.0.1:5000/hello/?name=GoodBoy

http://127.0.0.1:5000/hello/

二、Flask的request对象
@app.route('/hello/') def hello(): print("request: %s" % request ) print("request.path: %s" % request.path) print("request.full_path: %s" % request.full_path) print("request.host: %s" % request.host) print("request.host_url: %s" % request.host_url) print("request.base_url: %s" % request.base_url) print("request.url: %s" % request.url) print("request.url_root: %s" % request.url_root) print("request.args: %s" %request.args) print("request.args.items(): %s" % request.args.items()) print("request.headers:\n %s" % request.headers) print("请求数据request.data: %s" % request.data) print("request.endpoint: %s" % request.endpoint) print("request.json: %s" % request.json) print("request.method: %s" % request.method) print("请求的url模式(http或https)request.scheme: %s" % request.scheme) print("request.user_agent:\n %s" % request.user_agent) name = request.args.get('name','Flask') #获取查询参数name的值 return '<h1>Hello, %s</h1>' % name # 替换到返回值中
2.1查看路由信息
flask routes(端点和url的关系)

三、Flask中处理请求,指定方法
@app.route('/hi',methods=['GET','POST']) # 指定请求方法 def hi(): return '<h1>Hello, Flask!</h1>' if __name__ == '__main__': app.run(debug=True)
四、url变量转换器
@app.route('/goback/<int:year>') # url变量转换器 def go_back(year): return '<p>Welcom to %s ! </p>' %(2019-year) if __name__ == '__main__': app.run(debug=True) @app.route('/colors/<any(blue,white,red):color>')#any转换器,任意一个都可以访问 def three_colors(color): return '<p> life is coloful!</p>' if __name__ == '__main__': app.run(debug=True)
五、请求钩子
app.py文件内容
from flask import Flask import flask app = Flask(__name__) # @app.route('/colors/<any(blue,white,red):color>')#any转换器,任意一个都可以访问 # def three_colors(color): # return '<p> life is coloful!</p>' # if __name__ == '__main__': # app.run(debug=True) @app.before_request # 处理每个请求前运行(记录请求时间) def before_request(): print("before request") @app.before_first_request # 处理第一个请求前运行(初始化,添加数据库,建立连接) def before_first_request(): print("before first request") @app.after_request # 若没有未处理的异常抛出,会在每个请求结束后运行(请求后,更新数据库表) def per_request_callbacks(response): print("after request") return response @app.teardown_request # 若没有未处理的异常抛出,会在每个请求结束后运行 # 若发生异常会传入一场对象作为参数到注册的函数中 def teardown_request(e): # 最后一步执行的函数(譬如:关闭连接) print("teardown request") print("e: %s" % e) @app.route('/A') def A(): return '<p> this is function AA</p>' @app.route('/B') def B(): return '<p>this is function B</p>' @app.route('/C') def C(): @flask.after_this_request # 处理这个请求之后来运行下面的函数 def after_this_request(response): print("after this request") # raise ValueError response.status_code = 208 return response return "<p>after this request</p>" if __name__ == '__main__': app.run(debug=True)
5.1原理图解

最后一步:发出响应
六、指定返回码
from flask import Flask import flask app = Flask(__name__) @app.route('/hello/',methods=['post','get']) def hello(): return '<h1>Hello RenYc</h1>',201 if __name__ == '__main__': app.run(debug=True)
运行结果:

七、Flask中生成响应
from flask import Flask,make_response import flask app = Flask(__name__) @app.route('/foo') def foo(): response = make_response("Hello,make a respnse by yourself") response.mimetype = 'application/json' return response if __name__ == '__main__': app.run(debug=True) ############################################################ from flask import Flask, make_response import flask app = Flask(__name__) @app.route('/foo') def foo(): d = [1, 2, 3] response = make_response("Hello,make a respnse by yourself") # response.mimetype = 'application/json' response.mimetype = 'text/plain' return response if __name__ == '__main__': app.run(debug=True)
运行结果:


浙公网安备 33010602011771号