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')
  • 相关阅读:
    model.object对象查询过滤、增删改、Q
    模板中的标签、过滤器
    模板(template)包含与继承
    url用法
    AD用户登录验证,遍历OU(LDAP)
    Python下操作sqlite3
    多线程应用-类(thread)
    数组(list)分组、分段
    多线程应用-函数方式(thread)
    IntelliJ IDEA maven项目 ***
  • 原文地址:https://www.cnblogs.com/zh-xiaoyuan/p/13223216.html
Copyright © 2011-2022 走看看