【问题标题】:Flask Route Prefix for User Group用户组的 Flask 路由前缀
【发布时间】:2014-09-18 15:13:14
【问题描述】:

我有一个具有多个用户角色的烧瓶应用程序。所有角色都需要访问“索引”页面,但每个角色的页面会有所不同。为此,我认为最好的解决方案是为某些用户角色添加前缀。例如,管理员角色将转到http://admin.myapp.com/index,而合作伙伴将转到http://partner.myapp.com/

我已经看到了一些关于如何向所有视图添加路由前缀的信息,但我只希望它基于用户的角色。实现这一目标的最佳方法是什么?任何人都可以推动我朝着正确的方向前进吗?

谢谢!

【问题讨论】:

    标签: python flask


    【解决方案1】:

    我的建议是

    您无需担心域前缀即可解决此问题。

    显然,您将拥有具有user 相关字段的user 模型。添加role 作为user model 的字段之一

    models.py 中的用户模型

    class User(db.Model):
          ..........
          ..........
          role = db.Column(db.String(50)) #admin, customer, agent etc..
    

    views.py

    @app.route('/index' methods=('GET','POST'))
    @login_required
    def index_view():
       #get the current logged in user object
       user = current_user or g.user #based on your way of implementation
       if user.role == 'admin':
           return render_to_response('admin_index.html',{'data':'This is admin page'})
       elif user.role == 'agent':
           return render_to_response('agent_index.html',{'data':'This is agent page'})
       else:
           return render_to_response('default_index.html',{'data':'This is default page'})
    

    在这里,您应该添加 login_required 装饰器,以确保在访问此 view method 之前登录 user

    附加信息:

    如果您想将此view method 限制为特定的user roles,您可以编写@roles_required 装饰器,它将输入作为allowed_roles 并基于它返回

    roles_required装饰器实现概览

    def roles_required(func):
        def wrapper(*args, **kwargs):
            for i in args:
                user = current_user #get user object
                if user.role == i:
                    return func()
        return wrapper
    

    一旦你实现了roles_required,添加它对应的view方法,就像我们为def index_view()添加@login_required一样

    @roles_required('admin','agent')
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-06-24
      • 2020-12-04
      • 2015-12-10
      • 2011-06-09
      • 2013-10-09
      • 1970-01-01
      • 2015-12-21
      • 2018-07-13
      相关资源
      最近更新 更多