1. andrexus

    07.03.2010

    0 ↑
    0 ↓
    Этот вопрос уже поднимался тут http://softwaremaniacs.org/forum/django/6687/
    но для меня, только начинающего изучать Django, остался не до конца раскрытым.

    Итак, задача простая - сделать регистрацию пользователей, сохраняя при этом доп. информцию о пользователе.


    Для хранения доп. информации я воспользовался методом наследования от стандартного User-a описанного здесь http://scottbarnham.com/blog/2008/08/21/extending-the-django-user-model-with-inheritance/

    Теперь собственно вопрос - как в django-registration вместо стандартной формы регистрации вывести форму, полученную на основе модели расширенного пользователя?
    В документации к django-registration сказано следующее: "By default, this backend (default backend) uses registration.forms.RegistrationForm as its form class for user registration; this can be overridden by passing the keyword argument form_class to the register() view."

    Не могу понят куда передавать этот keyword argument form_class
  2. Dima Moroz

    08.03.2010

    1 ↑
    0 ↓
    В backends/default/urls.py для register/
  3. andrexus

    08.03.2010

    0 ↑
    0 ↓
    А можно немного подробнее? Т.е. я должен создать каталог backends/default/ с файлом urls.py следующего содержания
    from myproject.accounts.forms import RegistrationForm
    urlpatterns = patterns('',
    (r'register/', RegistrationForm),
    )
    а в основном urls.py как на этот файл ссылаться?
  4. Для начала просто прочитайте документацию об url patterns. Что они значат, как их писать, как передавать параметры.

    В основном urls.py вместо того, чтобы подключать сразу все пути registration:

    (r'^auth/', include('registration.urls'))
    

    нужно подключить их по отдельности с нужными параметрами. В данном случае - классом формы.

    Если определить параметры нужно только одному url, не обязательно копировать все:

    (r'^auth/register/$', 'registration.views.register',  {'arg': value}),
    (r'^auth/', include('registration.urls'))
    
  5. Dima Moroz

    08.03.2010

    0 ↑
    0 ↓
    @andrexus, загляни в каталог с registration, а в нем найди указанный файл. Ну и в документации об этом неплохо написано, так как там есть несколько готовых решений для форм, которые можно использовать вместо той что по умолчанию.
  6. andrexus

    08.03.2010

    0 ↑
    0 ↓
    Всем большое спасибо. Разобрался. Как-то в сети мало информации по этому поводу. Хотя задача-то достаточно типичная.
    На сколько мне стало понятно, следующим шагом будет наследование DefaultBackend и переопределение метода register для того чтобы заполнить поля расширенного User-a.
    На сколько это правильный подход и каким образом вы решаете такие стандартные задачи как регистрация и активация пользователей?
  7. Все правильно. Нужно сделать наследника и переопределить register.

  8. andrexus

    08.03.2010

    0 ↑
    0 ↓
    Еще один вопрос:
    метод register из DefaultBackend вызывает метод create_inactive_user из класса RegistrationProfile, который в свою очередь создает нового пользователя и отсылает email. Нужно ли ко всему прочему наследовать RegistrationProfile и переопределить метод create_inactive_user или лучше вытащить всю его логику в register?

Внимание! Это довольно старый топик, посты в него не попадут в новые, и их никто не увидит. Пишите пост, если хотите просто дополнить топик, а чтобы задать новый вопрос — начните новый.