2016-08-17 13 views
0

Я пытаюсь настроить сервер флеш-памяти, который добавляет данные/пользователей в базу данных mongoDB. я создал БД (с использованием Монго оболочки), так как:Flask server with MongoDB (flask-pymongo)

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

И подтвердить данные записываются с db.users.find().

Я добавил пользователь Монго так:

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

Мой config.py выглядит следующим образом:

... 
MONGO_URI = 'mongodb://user:[email protected]ost:27017/dbname' 

и мой питон выглядит следующим образом:

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

ответ

0

У вас есть опечатка отсутствует в

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

PyMongo использует переменную current_app из колбы, которая относится к применению, например, обрабатывающего запрос. В этом случае приложение обрабатывает запрос, но appp имеет конфигурацию. Таким образом, эта линия должна стать

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

Kostas был верным.

Я изменил:

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

просто

mongo = PyMongo(app)