Как обрабатывать вход и регистрацию по имени пользователя?

Я попытался изменить стиль входа по умолчанию на вход на основе имени пользователя. Для этого в db.py я написал:

from gluon.tools import Auth, Crud, Service, PluginManager, prettydate
auth = Auth(db)
crud, service, plugins = Crud(db), Service(), PluginManager()
auth.define_tables(username=True, signature=False, migrate=False)
auth_table=auth.settings.table_user
auth_table.username.requires = IS_NOT_IN_DB(db, auth_table.username)

Когда я пытаюсь зарегистрироваться для нового пользователя, он выдает эту ошибку:

<class 'sqlite3.OperationalError'> no such column: auth_user.username

Я хотел бы знать, как справиться с этим правильно. Кроме того, было бы очень полезно иметь хорошее объяснение того, как работает экспонирование и адресация этих таблиц. Я очень новичок в этом и нахожу это действительно запутанным.


person Subhamoy S.    schedule 15.01.2013    source источник


Ответы (1)


Если вы изначально создали таблицы Auth без имени пользователя, то в таблице auth_user не будет поля «имя пользователя». Поскольку у вас есть auth.define_tables(..., migrate=False), DAL не будет запускать миграцию для добавления нового поля. Итак, попробуйте временно изменить migrate на True, чтобы поле было добавлено.

person Anthony    schedule 15.01.2013
comment
Благодарю вас! Это решило это! У меня было неправильное представление о миграции, похоже. Я думал, что для него установлено значение false, если я хочу повторно использовать одни и те же таблицы базы данных для разных приложений. Я не понял, как это должно повлиять на изменение первичного ключа с адреса электронной почты на имя пользователя. - person Subhamoy S.; 15.01.2013