如何使用 flask_pymongo 和 flask_admin 添加管理员

Posted

技术标签:

【中文标题】如何使用 flask_pymongo 和 flask_admin 添加管理员【英文标题】:How to add admin using flask_pymongo and flask_admin 【发布时间】:2017-11-01 02:40:15 【问题描述】:

```

from flask import Flask
from flask_pymongo import PyMongo

from bson import json_util

from bson.objectid import ObjectId
import flask_admin as admin

from wtforms import form, fields

from flask_admin.form import Select2Widget
from flask_admin.contrib.pymongo import ModelView, filters
from flask_admin.model.fields import InlineFormField, InlineFieldList
from flask_pymongo import PyMongo

# app settings
app = Flask(__name__)

app.config['MONGO_URI'] = 'mongodb://username:passwrod@ds156811.mlab.com:56811/somedb'
app.config['MONGO_CONNECT'] = True
app.secret_key = 'secret'

mongo = PyMongo(app)
db = mongo


class UserForm(form.Form):
    name = fields.StringField('Name')
    email = fields.StringField('Email')

class UserView(ModelView):
    column_list = ('name', 'email')
    form = UserForm

admin = admin.Admin(app)


admin.add_view(UserView(db['users']))

```

这是取自https://flask-admin.readthedocs.io/en/v1.0.9/db_pymongo/的小例子 这是另一个: https://github.com/flask-admin/flask-admin/tree/master/examples/pymongo

flask-admin 社区用过pymongo 但我想用flask-pymongo 包。

我对大部分代码都没有问题,但是向管理页面添加视图会产生问题,admin.add_view() 函数会产生问题。

问题是如何通过flask-admin和flask-pymongo(pymongo不同)向管理页面添加视图?

已编辑: 错误信息:

TypeError: 'PyMongo' object is not subscriptable

我们使用 pymongo 获得的对象与我们从 pyflask-mongo 获得的不同,后者是造成问题的原因。

【问题讨论】:

【参考方案1】:

我使用的设置略有不同,但关键在于简单地意识到flask_pymongo.PyMongo 是您可以直接访问的PyMongo 实例的包装器。 在这种情况下,该 PyMongo 实例位于 mongo.db

with app.app_context():
  admin = admin.Admin(app)
  admin.add_view(UserView(mongo.db['users']))

您可能需要也可能不需要 with app.app_context():,具体取决于您的设置,但我认为值得留下。

【讨论】:

【参考方案2】:

不确定以下更改是否会有所帮助,这些实际上只是对您的问题的 cmet,但由于代表率低,我无法发表评论。

import flask_admin as admin

我不会以管理员身份导入它,因为最后有以下行:

admin = admin.Admin(app)

请尝试以下方法:

from flask_admin import Admin

然后在底线:

admin = Admin(app)

通过这种方式,您不会将admin 用于可能成为问题的多种事情。

编辑:

TypeError 导致了一个问题,因为 Pymongo 对象不是可下标的对象,所以你可以将最后一个代码更改为这个,在 flask_admin 文档中找到这个:

admin.add_view(ModelView(User, db.session))

【讨论】:

这行不通我的朋友,这个问题特别是在管理页面中添加视图....代码的最后一行,IMO 很好。 你能发布你的错误吗,你得到了吗?那样可能更容易找到解决方案。 问题确实出在这一行:admin.add_view(UserView(db['users'])) 但问题在于您提供给 UserView 的参数。您不能使用 db['users'] 因为 db 不是字典。我将用一些代码更新我的答案,因为这里写得太长了 这些更改对您有帮助吗@gurditsbedi?

以上是关于如何使用 flask_pymongo 和 flask_admin 添加管理员的主要内容,如果未能解决你的问题,请参考以下文章

使用 flask_pymongo 时身份验证失败

资产监测设备中HCL190FLAS擦写问题分析——HCL190

部署flas到服务器:No module named flask

环境监测设备中HCL190FLAS擦写问题定位——APP程序区

在android中同一界面有三个按钮,点击每个按钮在旁边一个框里分别打开视频,pdf,和flas...

无法将其他flas动画片段访问到动作脚本3