Логика проверки в Google App Engine - PullRequest
3 голосов
/ 25 февраля 2011

Часть приложения, которое я кодирую, структурирована примерно так:

class PostModel(db.Model):
    some_property = db.WhateverProperty()
    some_other_property = db.WhateverProperty()

class PostHandler(webapp.RequestHandler):
    def get(self):
        #code to generate form
    def post(self):
        #code to validate input from form
        #create entity and put() it to datastore if input passes the validation

Теперь, из того, что я читал о MVC, эта логика проверки должна быть в модели, верно? Итак, я должен сделать что-то подобное вместо этого?

class PostModel(db.Model):
    some_property = db.WhateverProperty()
    some_other_property = db.WhateverProperty()
    @staticmethod
    def validation_logic(form_input):
        #throw exceptions if validation fails
    @staticmethod
    def save_to_datastore(form_input):
        #this would assume data already passed validation
        #create entity and save it

class PostHandler(webapp.RequestHandler):
    def get(self):
        #code to generate form
    def post(self):
        try:
            PostModel.validation_logic(form_input)
        except CustomException,e:
            self.redirect('/errorpage?msg='+e.msg)
        PostModel.save_to_datastore(form_input)

Это хорошая форма MVC?

1 Ответ

3 голосов
/ 26 февраля 2011

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

Я думаю, что это хорошая идея - передать словарь значений в @classmethod измодель, и пусть она проверяет данные.У меня обычно есть метод класса, подобный вашему save_to_datastore(), в основном используемый для проверки и компоновки сущности, которую нужно сохранить, вместо того, чтобы делать это в обработчике.Я предпочитаю не иметь в обработчике данных конкретные вещи.Например: используйте методы класса модели для запросов вместо создания запросов непосредственно в обработчике.Это заставляет вас думать о модели как о API, ее легче поддерживать и отслеживать индексы и т. Д.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...