Пользовательский профиль пользователя web2py?

Каков «правильный» способ расширить базовую таблицу auth_user / вся система auth для поддержки ряда настраиваемых пользователей поля профиля (такие как имя пользователя, местоположение, день рождения и т. д.)?

Я заметил взгляды сотрудников Google, но, кажется, никто никогда не дает прямого ответа. Кажется, что ответ заключается либо в полной замене базовой таблицы auth_user на настраиваемую (и сообщении системе аутентификации), либо в создании новой таблицы расширений со ссылкой внешнего ключа обратно на базовый auth_user таблица. У первого, похоже, есть проблемы с возможностью повторного использования, у второго будут проблемы с формами и т. Д.

Есть ли у кого-нибудь указатели для исправления чего-то столь же универсального, как пользовательские профили, не ломая слишком много?

EDIT: Еще немного прочтения, в котором предлагается переопределить базовую таблицу auth_user , и после некоторых проб и ошибок я обнаружил, что это так же просто, как отбросить блок кода:

# before define_tables()
auth.settings.table_user = db.define_table('auth_user',
    Field('email', length=128,label=T('Email'), default='', unique=True),
    Field('user_name', length=128, label=T('User name'), default='', unique=True, 
        requires=IS_NOT_IN_DB(db, 'auth_user.user_name')
    ),
    Field('password', 'password', readable=False, label=T('Password'),
        requires=CRYPT()
    ),
    Field('first_name', length=128, label=T('First name'), default='',
        requires=(IS_NOT_EMPTY(error_message=auth.messages.is_empty),
        IS_NOT_IN_DB(db, 'auth_user.first_name'))
    ),
    Field('last_name', length=128, label=T('Last name'), default='',
        requires=(IS_NOT_EMPTY(error_message=auth.messages.is_empty),
        IS_NOT_IN_DB(db, 'auth_user.last_name'))
    ),
    Field('registration_key', length=128, default='', writable=False, readable=False),
    Field('country', 'string', length=15, label=T('Country'),
        requires=IS_NULL_OR(IS_IN_SET(('England')))
    ),
)

Пока поскольку это выполняется после auth = Auth (db) и до auth.define_tables () в models / db.py, все, кажется, работает нормально. Поля отображаются на странице профиля пользователя, а все остальное по-прежнему работает должным образом.

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

11
задан orlade 24 February 2016 в 05:02
поделиться