简体   繁体   English

带MongoDB的Flask服务器(flask-pymongo)

[英]Flask server with MongoDB (flask-pymongo)

I'm trying to set up a flask server which adds data/users to a mongoDB database. 我正在尝试设置一个烧瓶服务器,该服务器将数据/用户添加到mongoDB数据库。 I set up the DB (using mongo shell) like so: 我像这样设置数据库(使用mongo shell):

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

And confirm the data is written with db.users.find(). 并使用db.users.find()确认数据已写入。

I added a mongo user like so: 我像这样添加了一个mongo用户:

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

My config.py looks like: 我的config.py看起来像:

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

and my python looks like this: 和我的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')

I thought all was well but I got this when I tried it out: 我以为一切都很好,但是当我尝试时得到了:

在此处输入图片说明

It appears to say something about the config_prefix? 似乎在说一些关于config_prefix的东西? The docs say config_prefix is set to 'MONGO' by default and in my config the prefix is mongo. 文档说config_prefix默认设置为“ MONGO”,而在我的配置中前缀为mongo。 I must be missing something SOS 我一定缺少一些SOS

Kostas was correct. 科斯塔斯是正确的。

I changed: 我变了:

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

to simply 简单地

mongo = PyMongo(app)

You have a typo in 你有错字

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

PyMongo uses current_app variable from flask which refers to the application instance handling the request. PyMongo使用flask中的current_app变量来引用处理请求的应用程序实例。 In this case app handles the request but appp has the configuration. 在这种情况下, app处理请求,但是appp具有配置。 So this line should become 所以这条线应该变成

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM