Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/354.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
Python 用户组的路由前缀_Python_Flask - Fatal编程技术网

Python 用户组的路由前缀

Python 用户组的路由前缀,python,flask,Python,Flask,我有一个具有多个用户角色的flask应用程序。所有角色都需要访问“索引”页面,但每个角色的页面都不同。要实现这一点,我认为最好的解决方案是为某些用户角色添加前缀。例如,管理员角色将转到,合作伙伴将转到 我已经看到了一些关于如何向所有视图添加路由前缀的信息,但我只希望它基于用户的角色。实现这一目标的最佳方式是什么?有人能帮我往正确的方向推吗 谢谢 我的建议是去 解决这个问题不需要担心域前缀 显然,您将拥有用户模型,该模型具有用户相关字段。添加角色作为用户模型 models.py中的用户模型 vie

我有一个具有多个用户角色的flask应用程序。所有角色都需要访问“索引”页面,但每个角色的页面都不同。要实现这一点,我认为最好的解决方案是为某些用户角色添加前缀。例如,管理员角色将转到,合作伙伴将转到

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

谢谢

我的建议是去 解决这个问题不需要担心域前缀

显然,您将拥有
用户
模型,该模型具有
用户
相关字段。添加
角色
作为
用户模型

models.py中的用户模型 views.py 在这里,您应该添加decorator,以确保
用户在访问此
查看方法之前登录

其他信息: 如果要将此
查看方法
限制为特定的
用户角色
,可以编写
@roles\u required
装饰器,将输入作为
允许的\u角色
接收并基于它返回

roles\u required
decorator实现概述 一旦您实现了所需的
角色
,请将其添加到相应的
视图
方法中,就像我们为
定义索引视图()添加的
@login\u required
一样

class User(db.Model):
      ..........
      ..........
      role = db.Column(db.String(50)) #admin, customer, agent etc..
@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'})
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('admin','agent')