Flask & MongoDB (mLab) TypeError: ObjectId ('5bf0b6ce397b3635dc0b10ab') не поддерживает сериализацию в формате JSON - PullRequest
0 голосов
/ 18 ноября 2018

Я создаю веб-приложение на основе Flask, и в моем вспомогательном классе базы данных у меня есть функция create_user (), которая прекрасно работает, если строка выглядит следующим образом:

users.insert({'user': email, 'password': hashpass})

Однако, когда я изменяю его на:

users.insert({'email': email, 'password': hashpass})

Я получаю следующую ошибку:

TypeError: ObjectId('5bf0b6ce397b3635dc0b10ab') is not JSON serializable

База данных вспомогательных классов

import bcrypt

class DBHelper:

def __init__(self, mongo):
    self.mongo = mongo

def create_user(self, email, password):
    users = self.mongo.db.users
    hashpass = bcrypt.hashpw(password.encode('utf-8'), bcrypt.gensalt())
    users.insert({'email': email, 'password': hashpass})

Код колбы

@app.route("/account")
@login_required
def account():
    return render_template("home.html", options=options, questions=questions)
    return "You are logged in"


@app.route('/register', methods=['POST', 'GET'])
def register():
    if request.method == 'POST':
        stored_user = DB.get_user(request.form['email'])

        if stored_user is None:
            DB.create_user(request.form['email'], request.form['pass'])
            #session['username'] = request.form['username']
            user = User(DB.get_user(request.form['email']))
            login_user(user)
            return redirect(url_for('account'))

        return 'That username already exists!'

return render_template('register.html')

1 Ответ

0 голосов
/ 18 ноября 2018

Проблема была с кодом ниже:

user = User(DB.get_user(request.form['email']))
login_user(user)

Я передавал словарь классу User, а не адресу электронной почты.

...