2016-10-04 9 views
0

В книге Web2py дается an example of modelling an image blog. Строки кода, имеющие отношение к моему вопросу, являются:Эквивалентность `required = True` и` IS_NOT_IN_DB` в файле py2012 web2py

db.define_table('image', 
       Field('title', unique=True), 
       Field('file', 'upload'), 
       format = '%(title)s') 

db.image.title.requires = IS_NOT_IN_DB(db, db.image.title) 

В тексте говорится, что такие выражения, как db.image.title.requires являются валидаторы. Но

  1. Это не делает его ясно, будет ли unique=True в expresssion Field('title', unique=True) также валидатор с точно такой же функциональностью
  2. Какое влияние валидатор имеет на формообразования базы данных приводом.

ответ

1

Из книги:

Обратите внимание, что requires=... будет обеспечиваться соблюдение на уровне форм, required=True обеспечивается на уровне DAL (вставки), в то время как notnull, unique и ondelete исполняются на уровня базы данных. Хотя иногда они кажутся избыточными, важно поддерживать различие при программировании с помощью DAL.

unique=True делает не результат в валидатор создается. Это приводит к ограничению UNIQUE, добавляемому к схеме базы данных, когда web2py сначала создает таблицу в базе данных (при условии, что вы включили миграции). Если вы вызываете методы DAL .insert() или .update() со значениями, которые будут нарушать это ограничение, база данных будет вызывать ошибку (что приведет к исключению Python в вашем приложении).

Установка requires=IS_NOT_IN_DB(...) создает валидатор, который будет выполняться, когда вы (а) представить форму, созданную с помощью SQLFORM или (б) называют DAL .validate_and_insert() или .validate_and_update() методы. Если проверка не выполняется, вставка/обновление вообще не отправляется в базу данных, и вы не получаете исключение Python, а просто запись об ошибке (которая обычно отображается в форме в случае отправки формы).

Если вы будете делать вставки и обновления через формы, рекомендуется использовать валидатор, поскольку он обеспечивает правильное взаимодействие с пользователем (то есть отображает сообщение об ошибке с формой). Также рекомендуется установить unique=True, чтобы база данных имела соответствующую схему, если вы вставляете/обновляете средства, отличные от форм (и, возможно, даже вне web2py или DAL).

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

  • Нет связанных вопросов^_^