在 GAE 中,将某些 url 限制为仅供管理员使用是 quite easy :
- url: /admin/.*
script: admin.app
login: admin
现在我正在使用 Flask。我必须在每个仅限管理员的功能中重复相同的代码来判断用户是否是管理员,这使得代码冗长且冗余。
@app.route('/admin/somepage')
def AdminPage():
#Figure out if a user is admin
有更好的方法吗?
请您参考如下方法:
你可以使用 app.before_request() hook当请求的路径以 /admin/ 开头但身份验证信息丢失或不足时,检查请求并以重定向响应。
def check_for_admin(*args, **kw):
if request.path.startswith('/admin/'):
if not user.is_admin():
return redirect(url_for('login_form'))
通过返回一个响应对象(例如由 before_request 处理程序中的 flask.redirect() function 生成的对象)停止处理并且不调用实际 View 。
您还可以使用装饰器来标记管理 View ;这更灵活(路由不需要全部在一条路径下)并且更容易被发现(每条路由上都有装饰器)。
