gpt4 book ai didi

python - 装饰 Flask 可插入 View - BuildError

转载 作者:行者123 更新时间:2023-11-30 23:09:05 24 4
gpt4 key购买 nike

我正在尝试使用 Flask-Menu 和 Flask-Breadcrumbs 创建一个包含导航栏的网站。装饰器的使用方式如下( Flask-Menu 示例):

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

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

{%- for item in current_menu.children -%}
<a href="{{ item.url}}">{{ item.text }}</a>
{%- endfor -%}

我的代码抛出BuildError: ('contactsApp.SiteView', {}, None)

contactsApp = Blueprint('contactsApp', __name__, template_folder='templates')

@menu.register_menu(contactsApp, '.', 'List')
class ListView(MethodView):

def get(self):
contacts = Contact.objects.all()
return render_template('contacts/list.html', contacts=contacts)

@menu.register_menu(contactsApp, '.site', 'Sites')
class SiteView(MethodView):

def get(self):
sites = Site.objects.all()
return render_template('contacts/sites.html', sites=sites)

contactsApp.add_url_rule('/', view_func=ListView.as_view('list'))
contactsApp.add_url_rule('/site/', view_func=SiteView.as_view('sites'))

如何正确装饰可插入 View ?干杯。

最佳答案

有两种装饰 View 的选项:

a.您可以手动修饰 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)

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

class UserAPI(MethodView):
decorators = [user_required]

关于python - 装饰 Flask 可插入 View - BuildError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31397842/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com