美文网首页
flask入门到起飞(三) Cookie、Session及钩子函

flask入门到起飞(三) Cookie、Session及钩子函

作者: aimaile | 来源:发表于2018-10-15 22:54 被阅读0次

    Cookie和Session

    这里我直接上代码讲解怎么使用

    # coding:utf-8
    
    from flask import Flask, make_response, request,session, current_app
    
    app = Flask(__name__)
    
    @app.route("/set_cookie")
    def set_cookie():
        #先构造一个response对象,在对象里面设置cookie
        resp = make_response("success")
        # 设置cookie, 默认有效期是临时cookie,浏览器关闭就失效
        resp.set_cookie("company", "baidu")
        # max_age设置有效期,单位:秒,储存都是以键值对的形式
        resp.set_cookie("love", "money", max_age=3600)
        #下面这个方法等效上面这是直接设置cookie
        #实际上set_cookie方法就是在header里面添加一个相应头信息,里面就包括“Set-Cookie”字段信息,约定协议
        resp.headers["Set-Cookie"] = "love=money; Expires=Sat, 18-Nov-2017 04:36:04 GMT; Max-Age=3600; Path=/"
        return resp
    
    
    @app.route("/get_cookie")
    def get_cookie():
        #需要使用到设置的cookie值,直接在request拿到cookies对象
        a = request.cookies.get("love")
        return a
    
    @app.route("/delete_cookie")
    def delete_cookie():
        resp = make_response("del")
        # 删除cookie
        resp.delete_cookie("love")
        return resp
    
    
    # flask的session需要用到的秘钥字符串(必须)
    # flask默认把session保存到了cookie中,这一点我有时候都很难理解为什么这样搞
    # 这个数据放在浏览器很不安全,所有用了上面密钥加密了。
    app.config["SECRET_KEY"] = "weqwfqwqede123145453"
    
    
    @app.route("/login")
    def login():
        # 设置session数据
        session["name"] = "shuashua"
        session["mobile"] = "110119120"
        return "success"
    
    
    @app.route("/index")
    def index():
        # 获取session数据
        name = session.get("name")
        return "name is%s" % name
    
    if __name__ == '__main__':
        app.run(debug=True)
    

    钩子函数:flask也是面向切面编程的,按照android的思想就是声明周期的回调函数,类似于django 中间件的功能

    # coding:utf-8
    
    from flask import Flask, session, current_app, request, url_for
    
    app = Flask(__name__)
    
    @app.before_first_request
    def handle_before_first_request():
        """在第一次请求处理之前先被执行"""
        print("handle_before_first_request 被执行")
    
    
    @app.before_request
    def handle_before_request():
        """在每次请求之前都被执行"""
        print("handle_before_request 被执行")
    
    
    @app.after_request
    def handle_after_request(response):
        """在每次请求(视图函数处理)之后都被执行, 前提是视图函数没有出现异常"""
        print("handle_after_request 被执行")
        return response
    
    
    @app.teardown_request
    def handle_teardown_request(response):
        """在每次请求 (视图函数处理)之后都被执行, 无论视图函数是否出现异常,
    都被执行, 工作在非调试模式时 debug=False"""
        path = request.path
        if path == url_for("index"):
            print("在请求钩子中判断请求的视图逻辑: index")
        elif path == url_for("hello"):
            print("在请求钩子中判断请求的视图逻辑: hello")
        print("handle_teardown_request 被执行")
        return response
    
    
    if __name__ == '__main__':
        app.run()
    
    

    相关文章

      网友评论

          本文标题:flask入门到起飞(三) Cookie、Session及钩子函

          本文链接:https://www.haomeiwen.com/subject/hrxwaftx.html