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

时间:2017-05-31 10:28:28

标签: python mongodb flask pymongo flask-admin

如何使用flask_pymongo和flask_admin

添加管理员

```

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得到的对象不同,后者负责解决这个问题。

3 个答案:

答案 0 :(得分:0)

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

import flask_admin as admin

我不会将其导入为管理员,因为最后有以下行:

admin = admin.Admin(app)

请尝试以下方法:

from flask_admin import Admin

然后在底线:

admin = Admin(app)

通过这种方式,您不会将admin用于可能存在问题的多个事项。

编辑:

由于Pymongo对象不是可订阅对象,因此TypeError导致问题所以你可以将最后一个代码改为此,在flask_admin docs中找到它:

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

答案 1 :(得分:0)

最后,我无法使用flask_pymongoflask-admin找到解决方案。

我使用pymongo代替。

我写的代码非常类似于 https://github.com/flask-admin/flask-admin/blob/master/examples/pymongo/app.py

请勿使用上述链接中的requirements.txt文件。安装最新版本的pymongo。 requirements.txt文件中的指定版本对我不起作用。

答案 2 :(得分:0)

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

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

根据您的设置,您可能需要也可能不需要with app.app_context():,但我认为值得留下。