flask总结02

一: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()
View Code

浏览器效果:

 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))
View Code

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结果:

 
原文地址:https://www.cnblogs.com/one-tom/p/10672071.html