Хороший способ создания пользователей из формы
Я должен создать сайт конференции, эта конференция проводилась каждый год один раз.
Пользователи должны зарегистрироваться, заполнить ~10 вопросов и загрузить 2 файла. В следующем году пользователи должны иметь возможность войти и исправить свои данные.
планируется использовать:
plone.app.forms
dexterity.membrane
Любые идеи приветствуются.
2 ответа
Вы можете использовать альтернативный подход, основанный на функции, предоставляемой членством в портале. Создайте свой собственный объект UserFolder и сообщите членству портала, чтобы он использовался в качестве типа пользовательской папки. Для этого вам нужно всего лишь изменить настройки членства в портале во время установки и включить "действие моей папки":
def setup_membership(self, site):
portal_membership = getToolByName(site, 'portal_membership')
workflow = getMultiAdapter((site, site.REQUEST), name=u'plone_tools').workflow()
# setup member area
if not site.hasObject(USERS_FOLDER_ID):
site.invokeFactory('Folder', USERS_FOLDER_ID, **{'title':'Users'})
users_folder = site[USERS_FOLDER_ID]
users_folder.processForm()
# publish the users folder
...
users_folder.setExcludeFromNav(True)
users_folder.reindexObject()
# set members area folder
portal_membership.setMembersFolderById(USERS_FOLDER_ID)
# setup member area type
portal_membership.manage_setMemberAreaType('UserProfile')
# enable members memberarea creation
portal_membership.memberareaCreationFlag = 1
# enable the 'my folder' user action, etc...
...
Таким образом, вы по-прежнему будете использовать стандартного пользователя Plone и получите полный контроль над вашим приложением, вы также можете выбрать, куда поместить объекты UserFolder (возможно, в папку /users), рабочие процессы, добавить новые поля профиля и т. Д. Нет. мембрана нужна так.
У меня также было аналогичное требование разрешить загружать N и только макс. N вложений (или других объектов). Я предлагаю вам добавить обработчик событий для добавленных объектов UserProfile. Таким образом, вы можете принудительно создать два или более файловых вложений и дать пользователю только разрешение на редактирование. Он не сможет добавлять другие вложения, и вы по-прежнему будете использовать стандартные объекты файлов или изображений, не имея дело с хранилищем BLOB-объектов.
Это хорошо сработало для меня в проекте, основанном на архетипах, но оно должно быть таким же для ловкости.
Надеюсь, это может помочь:)
Я предлагаю вам не трогать пользовательскую схему. Вы можете создать собственный тип контента с вашими вопросами и файлами и поделиться им со своими пользователями.