zoukankan      html  css  js  c++  java
  • 装饰器之functools与before_request

    链接

    # 1. 装饰器
    import functools
    
    def auth(func):
        # @functools.wraps(func)  加上这个后print(index.__name__)打印的结果是index, 但本质上执行的还是inner函数,把原函数的源信息封装到闭包函数里了
        # 可避免endpoint反向解析时函数名重名
        def inner(*args,**kwargs):
            ret = func(*args,**kwargs)
            return ret
        return inner
    
    @auth
    def index():
        print('index')
    
    @auth
    def detail():
        print('detail')
    
    print(index.__name__)     #inner    加上装饰器后本质上执行的是inner函数
    print(detail.__name__)    #inner

     学生登陆示例

    #版本一:
        @app.route('/index')
        def index():
            if not session.get('user'):
                return redirect(url_for('login'))
            return render_template('index.html',stu_dic=STUDENT_DICT)
    #版本二:
        import functools
        def auth(func):
            @functools.wraps(func)
            def inner(*args,**kwargs):
                if not session.get('user'):
                    return redirect(url_for('login'))
                ret = func(*args,**kwargs)
                return ret
            return inner
    
        @app.route('/index')
        @auth
        def index():
            return render_template('index.html',stu_dic=STUDENT_DICT)
    
        #应用场景:比较少的函数中需要额外添加功能。
        
    #版本三:before_request
        @app.before_request
        def xxxxxx():
            if request.path == '/login':
                return None   #继续往下执行
    
            if session.get('user'):
                return None
    
            return redirect('/login')
  • 相关阅读:
    第 6 章 存储
    第 6 章 存储
    第 6 章 存储
    第 6 章 存储
    第 6 章 存储
    vba:csv文件批量转换为xls的宏
    MySQL安装教程 推荐5.xx版本
    Cover Letter Draft for Application
    团队角色自测问卷答案
    联想Global future leader program面试
  • 原文地址:https://www.cnblogs.com/zh-xiaoyuan/p/13223216.html
Copyright © 2011-2022 走看看