一:flask的响应:
flask默认支持2种响应方式:
数据响应: 默认响应html文本,也可以返回 JSON格式
页面响应: 重定向 url_for
响应的时候,flask也支持自定义http响应状态码
01:响应html文本
from flask import Flask, request from settings.dev import DevConfig app = Flask(__name__) app.config.from_object(DevConfig) @app.route("/test04") def test04(): return "<h1> 这是相应html 文本的例子 </h1>" if __name__ == '__main__': app.run()
相应效果:
02:返回JSON数据(需要导入jsonify)
案例代码:
from flask import Flask, request,jsonify from settings.dev import DevConfig app = Flask(__name__) app.config.from_object(DevConfig) @app.route("/test04") def test04(): return "<h1> 这是相应html 文本的例子 </h1>" @app.route("/test05") def test05(): data = [ {"id": 1, "username": "liulaoshi", "age": 18}, {"id": 2, "username": "liulaoshi", "age": 17}, {"id": 3, "username": "liulaoshi", "age": 16}, {"id": 4, "username": "liulaoshi", "age": 15}, ] return jsonify(data) if __name__ == '__main__': app.run()
浏览器效果:
03:重定向(需要导入from flask import Flask,redirect,url_for)
案例代码:
from flask import Flask, request,jsonify,redirect,url_for from settings.dev import DevConfig app = Flask(__name__) app.config.from_object(DevConfig) @app.route("/test04") def test04(): return "<h1> 这是相应html 文本的例子 </h1>" @app.route("/test05") def test05(): data = [ {"id": 1, "username": "liulaoshi", "age": 18}, {"id": 2, "username": "liulaoshi", "age": 17}, {"id": 3, "username": "liulaoshi", "age": 16}, {"id": 4, "username": "liulaoshi", "age": 15}, ] return jsonify(data) @app.route("/test06") def test06(): return redirect(url_for("test05")) if __name__ == '__main__': app.run()
案例显示结果:(地址栏很快就跳转到了test05)
04:重定向到带有参数的视图函数(在 url_for 函数中传入参数)
# 路由传递参数 @app.route('/user/<user_id>') def user_info(user_id): return 'hello %d' % user_id # 重定向 @app.route('/demo4') def demo4(): # 使用 url_for 生成指定视图函数所对应的 url return redirect(url_for('user_info', user_id=100))
05:自定义状态码
在 Flask 中,可以很方便的返回自定义状态码,以实现不符合 http 协议的状态码,例如:status code: 666
@app.route('/demo4') def demo4(): return '状态码为 666', 400
二:会话控制(session和cookie)
01:设置cookie
设置cookie需要通过flask的Response响应对象来进行设置,由flask内部提供了一个make_response函数给我们可以快速创建响应对象
from flask import Flask,make_response
案例代码:
from flask import Flask, request,jsonify,redirect,url_for,make_response from settings.dev import DevConfig app = Flask(__name__) app.config.from_object(DevConfig) @app.route("/test07") def test07(): resp=make_response('this is to set cookie') resp.set_cookie("username","Tom",max_age=3600) #max_age=3600 有效时间秒 return resp if __name__ == '__main__': app.run()
通过浏览器查看结果:
02:获取cookie
代码:
from flask import Flask, request,make_response from settings.dev import DevConfig app = Flask(__name__) app.config.from_object(DevConfig) #设置cookie @app.route("/test07") def test07(): resp=make_response('this is to set cookie') resp.set_cookie("username","Tom",max_age=3600) return resp #获取cookie from flask import Flask,request @app.route("/get_cookie") def resp_cookie(): resp=request.cookies.get("username") print("cookie值是〉〉",resp) return "获取到的cookie值是:〉〉%s" % resp if __name__ == '__main__': app.run()
显示结果:
03:设置session和获取session
对于敏感、重要的信息,建议要存储在服务器端,不能存储在浏览器中,如用户名、余额、等级、验证码等信息
在服务器端进行状态保持的方案就是`Session`
注意: **Session依赖于Cookie**,而且flask中使用session,需要配置SECRET_KEY选项,否则报错.
代码:
from flask import Flask, request,jsonify,redirect,url_for,make_response from settings.dev import DevConfig app = Flask(__name__) app.config.from_object(DevConfig) #设置session from flask import Flask,session @app.route("/test08") def set_session(): session["username"]="One-Tom" return "ok" #获取session @app.route("/test09") def get_cookie(): return session.get("username") if __name__ == '__main__': app.run()
设置session的结果:
显示获取到的session结果: