如何使用 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 添加管理员的主要内容,如果未能解决你的问题,请参考以下文章
资产监测设备中HCL190FLAS擦写问题分析——HCL190
部署flas到服务器:No module named flask
环境监测设备中HCL190FLAS擦写问题定位——APP程序区