2015-12-16 3 views
0

У меня возникли проблемы с отправкой моих данных form в MongoDB с установкой Flask. Форма выглядит примерно так: https://jsfiddle.net/8gqLtv7eОтправить данные формы MongoDB с помощью Flask

На стороне клиента я не вижу ошибок. Но когда я отправляю форму, я получаю 500 Internal Server Error, и мне сложно найти решение. Проблема заключается в последней строке ниже в моем views.py файле:

@app.route('/recordReport', methods=['POST']) 
def recordReport(): 
    homeReportsCollection = db["reports"] 
    address=request.form.get['address'] 
    rgbImage=request.form.get['rgb'] 
    homeReportsCollection.insert({'address':address, 'rgb':rgbImage}) 

Потому что, если я заменю, что с return json.dumps({'status':'OK', 'address':'address', 'rgb':'rgbImage'}), я могу видеть правильные данные в браузере. Просто не могу отправить его в коллекцию в MongoDB.

+0

Разве вы не используете 'insert_one()'? – Quirk

+0

'homeReportsCollection.insert_one ({'address': address, 'rgb': rgbImage})' все еще приводит к 500 Internal Server Error. – mapr

+0

Вы пробовали листинг типа 'address' и' rgbImage' до 'String' перед вставкой? – Quirk

ответ

1

Этот ответ представляет собой резюме комментариев (где найдено решение).


Have you tried typecasting address and rgbImage to String before inserting?

Тип недействительность является корнем многих распространенных ошибок в операциях БД.

There used to be a bug in Mongo back in 2013. The data would be inserted into the collection. But Mongo would not return a correct status response. That led to servers going 500 . Have you tried verifying if the data was indeed inserted into the collection?

Additionally run your flask app in debug=True mode. That might give additional data.

Флакон имеет очень хорошую поддержку отладки отслеживания отчетов. Это, как правило, хорошая идея. На самом деле это должно быть первым, что нужно сделать, когда вы сталкиваетесь с ошибкой.

So this is weird, I turned on debug=True and I get the following error: ValueError: View function did not return a response. BUT the data did actually get sent to DB via homeReportsCollection.insert({'address':address, 'rgb':rgbImage}) line. I see it in my collection. How do I fix the error? Because the user is redirected to /recordReport .

Таким образом, данные были действительно вставлены в коллекцию. Это, возможно, проблема с колбой. Трассировка говорит все. Флажок требует, чтобы что-то возвращалось методом просмотра.

Try returning something in your function recordReport() . Return anything you want. It could be an OK message. It could be the _id of the document you just inserted into the collection. Just don't return None . Try this.

Данное поведение подтверждено в этом SO question.

Yeah, I returned an HTML template and no error now.

Это действительно решение. Верните что-то отличное от None из ваших методов просмотра . Это также подтверждает поведение наблюдателя в вопросе:

Because if I replace that with return json.dumps({'status':'OK', 'address':'address', 'rgb':'rgbImage'}) , I can see the correct data in my browser.

Смежные вопросы