装饰Flask可插入视图 - BuildError

时间:2015-07-14 04:46:25

标签: python flask

我正在尝试使用Flask-Menu和Flask-Breadcrumbs创建包含导航栏的网站。像这样使用装饰器(Flask-Menu示例):

<script type="text/javascript">

        $(document).ready(function(){

        $('#username').keyup(function(){

            var user = $('#username').val();
            $.post('checkusername.php', {username: user}, function(data){

            $('#wnguser').html(data);

            //DOES NOT WORK
            if (data === "username available"){
                 execute some code
            }

            });

        });



        });

    </script>

但是,我想使用最终允许更复杂操作的MethodView类。模板摘录:

@app.route('/')
@menu.register_menu(app, '.', 'Home')
def index():
    return tmpl_show_menu() #Some view

我的代码抛出{%- for item in current_menu.children -%} <a href="{{ item.url}}">{{ item.text }}</a> {%- endfor -%}

BuildError: ('contactsApp.SiteView', {}, None)

如何正确装饰可插拔视图?欢呼声。

1 个答案:

答案 0 :(得分:2)

装饰 View 有两种选择:

一个。您可以手动修饰as_view()的返回值。

def user_required(f):
    """Checks whether user is logged in or raises error 401."""
    def decorator(*args, **kwargs):
        if not g.user:
            abort(401)
        return f(*args, **kwargs)
    return decorator

view = user_required(UserAPI.as_view('users'))
app.add_url_rule('/users/', view_func=view)

湾如果您使用Flask 0.8+,则可以指定要在类声明中应用的装饰器列表。

class UserAPI(MethodView):
    decorators = [user_required]