带有MongoDB的烧瓶服务器(flask-pymongo)

时间:2016-08-17 19:39:52

标签: python mongodb

我正在尝试设置一个将数据/用户添加到mongoDB数据库的烧录服务器。 我设置了DB(使用mongo shell),如下所示:

>use dbname
switched to dbname    
>db.users.save( {username:"user", password:"pass"} )
WriteResult({ "nInserted" : 1 })

确认数据是用db.users.find()编写的。

我添加了一个像这样的mongo用户:

>use admin
switched to db admin
>var w = { user:"user", roles:["readWriteAnyDatabase"], pwd:"password"}
>db.createUser(w)

我的config.py看起来像:

...
MONGO_URI = 'mongodb://user:password@localhost:27017/dbname'

我的python看起来像这样:

from flask import render_template, flash, redirect, Flask
from app import app
from flask_pymongo import PyMongo
from .forms import LoginForm

appp = Flask(__name__)
mongo = PyMongo(appp)

@app.route('/login', methods=['GET', 'POST'])
def login:
    form = LoginForm()
    if form.validate_on_submit():
        user = {"username": form.username.data,
                "password": form.password.data}
        post_id = mongo.db.users.insert_one(user)
        flash('Login req: u=%s, p=%s' % (form.username.data, str(form.remember_me.data)))
        return redirect('/index')

我认为一切都很好,但是当我尝试时我得到了这个:

enter image description here

似乎有关于config_prefix的说法?文档说默认情况下config_prefix设置为'MONGO',在我的配置中前缀为mongo。我一定错过了SOS

2 个答案:

答案 0 :(得分:1)

科斯塔斯是对的。

我改变了:

appp = Flask(__name__)
mongo = PyMongo(appp)

简单地

mongo = PyMongo(app)

答案 1 :(得分:0)

你输错了

@app.route('/login', methods=['GET', 'POST'])

PyMongo使用来自flask的current_app变量,该变量引用处理请求的应用程序实例。在这种情况下,应用处理请求,但 appp 具有配置。所以这一行应该成为

@appp.route('/login', methods=['GET', 'POST'])