• 装饰器之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')
  • 相关阅读:
    常见的查找算法(七):哈希查找
    常见的查找算法(六):分块查找
    常见的查找算法(五):树表查找之一 ---- 二叉查找树
    让div充满整个body
    display:table的用法
    webpack-dev-server
    webpack--loader
    webpack nodejs npm关系
    js中==和===区别
    vue 的点击事件怎么获取当前点击的元素
  • 原文地址:https://www.cnblogs.com/zh-xiaoyuan/p/13223216.html
Copyright © 2020-2023  润新知