che*_*xee 8 python flask flask-login
我有一个蓝图和一些网址功能,
admin_bp = Blueprint('admin', __name__)
@admin_bp.route('/dashboard', methods=['GET', ])
@flask_login.login_required
def dashboard():
context = {}
page = 'admin/dashboard.html'
return render_template(page, **context)
@admin_bp.route('/deny', methods=['GET', ])
@flask_login.login_required
def deny():
return 'hey bro you dont belong here'
Run Code Online (Sandbox Code Playgroud)
我不想@flask_login.login_required在这个蓝图下为所有url函数复制粘贴装饰器.有没有更好的方法可以为所有蓝图网址应用装饰器?
Rob*_*ert 10
您可以添加before_request()一个函数,该函数将在视图中的每个请求之前运行。
然后,您将需要添加装饰器以向该before_request函数注入附加功能。您需要导入login_required装饰器以确保每个端点都需要登录用户。这个装饰器是flask_login库的一部分。
由于您的视图看起来像是管理员的一部分,因此我还建议您为您的before_request函数添加一个自定义装饰器,例如@role_required('admin'). 该装饰器的功能将位于其他地方并被导入。
@admin_bp.before_request
@login_required
def before_request():
""" Protect all of the admin endpoints. """
pass
Run Code Online (Sandbox Code Playgroud)
首先检查用户怎么样:
from flask.ext.login import current_user
@admin_bp.before_request
def check_user():
if not current_user.is_authenticated():
abort(401)
# your other functions without `@flask_login.login_required`
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2200 次 |
| 最近记录: |