Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用Flask登录和自定义Python装饰程序来分配用户权限?_Python_Flask_Decorator_Flask Login - Fatal编程技术网

如何使用Flask登录和自定义Python装饰程序来分配用户权限?

如何使用Flask登录和自定义Python装饰程序来分配用户权限?,python,flask,decorator,flask-login,Python,Flask,Decorator,Flask Login,我不知道如何让Python装饰程序在Flask视图上工作 这是我的装饰师: from functools import wraps def admin_only(func): @wraps(func) def wrapper(*args, **kwargs): print("It did something") if current_user.is_anonymous: flash("Please log in to us

我不知道如何让Python装饰程序在Flask视图上工作

这是我的装饰师:

from functools import wraps

def admin_only(func):
    @wraps(func)
    def wrapper(*args, **kwargs):
        print("It did something")
        if current_user.is_anonymous:
            flash("Please log in to use this site.", "info")
            return redirect(url_for('login'))
        if not current_user.admin:
            abort(403)
        return func(*args, **kwargs)
    return wrapper


@bp.errorhandler(403)
def forbidden_403(exception):
    return 'Admin access only', 403

以下是我的观点:

@bp.route('/add_info', methods=['GET', 'POST'])
@admin_only
def add_info():
    add_info_form = AddInfoForm()
    if add_info_form.validate_on_submit():
        print("Code here")
    else:
        for error in add_info_form.errors:
            flash(error, "info")
    context = {
        'add_info_form': add_info_form,
    }
    return render_template('admin/add_info.html', **context)
装饰器根本不起作用——视图可以工作,但允许任何用户通过。在view函数运行之前应该实现的所有代码均未运行。我尝试过各种不同的格式化技巧,但都不奏效

我使用了这个答案中的代码-:

似乎什么都不管用。我错过了什么


提前谢谢。

好吧,我不知道为什么会这样,但我要说:

我使用的蓝图文件结构如下:

/app
   /user
      /__init__.py
      /forms.py
      /templates/user
         /user.html
   /lists
      /__init__.py
      /forms.py
      /templates/lists
         /lists.html
   /admin
      /__init__.py
      /forms.py
      /templates/admin
         /add_user.html
         /add_info.html
         /all_lists.html
   __init__.py
   forms.py
   models.py
   /templates
      index.html
我之前在
/admin/\uuuu init\uuuuuuuuuuupy
中定义了decorator函数。当我简单地将它移动到
app/\uuuuu init\uuuuu.py
文件时,该函数运行良好


我很高兴,但我也希望有人能提供一些关于为什么会这样的细节。如果没有,我会接受我的回答。也许这与Flask在
\uuuu init\uuuu.py
文件中运行函数的顺序有关…

好吧,我不知道为什么会这样,但我要说:

我使用的蓝图文件结构如下:

/app
   /user
      /__init__.py
      /forms.py
      /templates/user
         /user.html
   /lists
      /__init__.py
      /forms.py
      /templates/lists
         /lists.html
   /admin
      /__init__.py
      /forms.py
      /templates/admin
         /add_user.html
         /add_info.html
         /all_lists.html
   __init__.py
   forms.py
   models.py
   /templates
      index.html
我之前在
/admin/\uuuu init\uuuuuuuuuuupy
中定义了decorator函数。当我简单地将它移动到
app/\uuuuu init\uuuuu.py
文件时,该函数运行良好


我很高兴,但我也希望有人能提供一些关于为什么会这样的细节。如果没有,我会接受我的回答。也许这与在
\uuu init\uuuuuuuuuuuuuuuuupy
文件中运行函数的顺序有关…

我怀疑当您在
admin/\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuupy
模块中使用decorator函数时,它不起作用,因为您没有将其正确导入
routes.pyroutes.py中是否有来自app.admin import admin\u的
而不是来自app.admin import admin\u的
?我怀疑,当您在
admin/\uu init\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuupy
模块中具有装饰功能时,该功能不起作用,因为您没有将其正确导入
routes.py
模块。您的
路由.py中是否有
仅来自app.admin导入管理
,而不是
仅来自app.admin导入管理