私はフラスコを初めて使用し、デコレータの強力な機能を使用しようとしています:p ここで多くのことを読んで、pythonデコレータに関するトピックをたくさん見つけましたが、実際には何も役に立ちませんでした。
@app.route('groups/<id_group>')
@group_required(id_group)
@login_required
def groups_groupIndex(id_group):
#do some stuff
return render_template('index_group.html')
これは私が得るエラーです:
@group_required(id_group), NameError: name 'id_group' is not defined
わかりました、id_group はまだ定義されていませんが、関数 groups_groupIndex では URL から id_group パラメータを使用できるのに、デコレータでは使用できない理由がわかりません!
デコレータを移動/切り替えようとしましたが、毎回同じエラーが発生しました。
ここに私のデコレータがありますが、うまくいくようです
def group_required(group_id):
def decorated(func):
@wraps(func)
def inner (*args, **kwargs):
#Core_usergroup : table to match users and groups
groups = Core_usergroup.query.filter_by(user_id = g.user.id).all()
for group in groups:
#if the current user is in the group : return func
if int(group.group_id) == int(group_id) :
return func(*args, **kwargs)
flash(gettext('You have no right on this group'))
return render_template('access_denied.html')
return inner
return decorated
デコレータが表示されない可能性があります...この方法でデコレータを使用できますか、それとも別のものを書き直す必要がありますか?