【问题标题】:Flask-Admin modelview functionFlask-Admin 模型视图功能
【发布时间】:2014-07-15 20:25:03
【问题描述】:

我有一个带有 Flask-Admin 的烧瓶应用程序来管理具有 /admin/userview 模型视图的用户。 我希望它在数据库中具有正确组的用户导航到/admin/userview 时显示页面,如果不是,则返回纯文本“非管理员”。幸运的是我得到了最后一部分的工作,但不幸的是我似乎无法得到第一部分(如果他们在正确的组中,继续显示页面)。以下是相关代码:

class MyView(ModelView):
    @expose('/', methods = ['GET', 'POST'])
    def index(self):
    ## grab kerberos username (PROD)
        secuser = request.environ.get('REMOTE_USER')

        adminresult = User.query.filter_by(usrlevel='admin').all()
        adminresult = str(adminresult)
        adminresult = adminresult.strip('[]')

        managerresult = User.query.filter_by(usrlevel='manager').all()
        managerresult = str(managerresult)
        managerresult = managerresult.strip('[]')    

        if secuser in adminresult:
            pass         <---------------\
        elif secuser in managerresult:    |- if a user is apart of either, this gives a ValueError
            pass         <---------------/
        else:
            return "NOT ADMIN" <--------- This works!

##ADMIN
admin = Admin(flaskapp, index_view=MyHomeView(), name="test APP")
admin.add_view(MyView(User, db.session, "Edit Users"))

这是我在用户位于adminresultmanagerresult 时得到的回溯:

Traceback (most recent call last):
  File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1836, in __call__
    return self.wsgi_app(environ, start_response)
  File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1820, in wsgi_app
    response = self.make_response(self.handle_exception(e))
  File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1403, in handle_exception
   reraise(exc_type, exc_value, tb)
  File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1817, in wsgi_app
    response = self.full_dispatch_request()
  File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1478, in full_dispatch_request
    response = self.make_response(rv)
  File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1566, in make_response
    raise ValueError('View function did not return a response')
ValueError: View function did not return a response

如果用户在任一组中,我如何让ModelView“用户”显示其内容,如果不是,则只返回“非管理员”文本?我想我已经完成了一半,只是继续似乎是一个问题......

谢谢!

【问题讨论】:

    标签: python flask flask-sqlalchemy flask-admin


    【解决方案1】:

    您实际上应该将支票放入is_accessible

    class MyView(ModelView):
        def is_accessible(self):
            # grab kerberos username (PROD)
            secuser = request.environ.get('REMOTE_USER')
    
            admins_and_managers = User.query
                                      .filter(User.usrlevel.in_('admin', 'manager'))
                                      # Better yet, filter again on `secuser`
                                      # to avoid loading *every* admin and manager
                                      # on *every* request for this resource
                                      # and then use `.first` or `.one`
                                      .all()
    
            return secuser in admins_and_managers
    

    【讨论】:

    • 必须进行字符串格式化以查看secuser 是否在其中。非常感谢,我已经为此工作了好几天!我欠你一杯啤酒。
    • 如果您必须进行字符串格式化,那么您可能依赖于 User__str__ 方法 - 从长远来看,这不是一个好主意。最好按适当的字段实际过滤(添加filter_by(username=secuser),其中usernameUser.__str__User.__repr__ 中使用的字段的名称。)然后您可以只使用.first 而不是.all 和将检查更改为admins_and_managers is not None)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-03
    • 1970-01-01
    相关资源
    最近更新 更多