LINUX.ORG.RU

Flask и MongoDB

 , , ,


0

1

Никак не получается подружить Flask с MongoDB. Есть две модели: User и Project. Обе наследуются от db.Document, Для обеих создаётся форма с помощью model_form. Вернее, для User он создаётся, а для Project выбрасывает исключение:

TypeError: model must be a mongoengine Document schema

Вот исходный код моделей:

class Project(db.Document):
    created_at = db.DateTimeField(default=datetime.datetime.now, required=True)
    name = db.StringField(max_length=255, required=True)
    description = db.StringField()



class User(db.Document):
    username = db.StringField(max_length=255, required=True)
    email = db.StringField(max_length=255)
    password_hash = db.StringField(max_length=128, required=True)
    password_salt = db.StringField(max_length=32, required=True)

    def is_authenticated(self):
        return True

    def is_active(self):
        return True

    def is_anonymous(self):
        return False

    def get_id(self):
        return self.username

Вот код, генерирующий формы:

UserForm = model_form(User) # работает
ProjectForm = model_form(Project, exclude=['created_at']) # не работает, выбрасывает то самое исключение. 


Ответ на: комментарий от Siado

pymongo

А там можно так же БЫСТРО, как и в ORM, работать с БД? Так-то я и flask-pymongo уже поставил. Но мне почему-то кажется, что с pymongo я раздую код в 4-5 раз.

NoSQL и SQL кардинально отличаются

В курсе.

kosc ()
Ответ на: комментарий от kosc

Ну а чего там раздувать?

Объявляешь где-нибудь переменную с монгой:

client = MongoClient()
db = client.myprogect

А дальше начинаешь инсертить, апсертить и апдейтить:

UserDict = { 'username':'name',
    'email':'email',
    'password_hash':'hash'
    'password_salt':'salt' }
db.users.insert(UserDict)

Делаешь или прямо в коде (не больно оно и разрастается) или оборачиваешь все обращения к БД в функции и классы, а потом суеш в отдельный модуль.

Siado ★★★★★ ()
Ответ на: комментарий от Makc

Ну вот я как раз через него и делаю всё это безобразие.

А вообще, я всё ещё жду ответа на «куда копать», а не только «как копать».

kosc ()
Ответ на: комментарий от k0valenk0_igor

Да, сам документ создаётся. И read/update/delete над ним тоже работает. Только вот на model_form приложение падает.

kosc ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.