среда, 26 декабря 2007 г.

Django: регистрация новых пользователей или django-registration, часть 1

Раз есть юзеры, значит, их нужно как-то регистрировать :-)

Для этого предназначен django-registration.

Работает так:

  1. юзер по адресу http://ваш_адрес/accounts/register/ заполняет форму с 4 полями: "username", "email address", "password", "password (again)".
  2. юзеру отсылается мыло с линком для активации учётной записи.
  3. юзер кликает линк, учётная запись активируется.
Чекаем код из SVN в проект, в settings.py добавляем опцию
ACCOUNT_ACTIVATION_DAYS = 3 (вместо 3 можете указать своё количество дней, в течение которых юзер может кликнуть на линк для активации), в INSTALLED_APPS добавляем 'registration',
manage.py syncdb
Можно юзать ? В принципе, да :-)

Всё ОК, и документация есть, но в версии из SVN нету шаблонов для примера. Это очень плохо. Мне пришлось прочитать документацию и код, чтобы сделать шаблоны. Чтобы вам не париться с этим, а сразу иметь рабочие примеры, я и пишу этот пост :-)

Я так настраиваю TEMPLATE_DIRS:

TEMPLATE_DIRS = (
os.path.join(os.path.dirname(__file__), 'templates'),
)


В каталоге шаблонов делаем подкаталог с названием registration. В нём создаём следующие шаблоны:

------ registration_form.html ------

<form action="." method="POST">
<table>
{{ form }}
</table>
<p><input type="submit" value="Submit"></p>
</form>


Необходимый элемент - {{ form }}. Это форма как раз с теми 4 полями: "username", "email address", "password", "password (again)".

------ activation_email_subject.txt ------

Your registration for {{site}}.

Содержит переменную - {{ site }} (название сайта из админки).
Это тема письма, которое будет выслано после регистрации.

------ activation_email.txt ------

Hello,

Please follow this link to complete your registration on {{ site }}:
http://www.yoursite.com/activate/{{activation_key}}/


You have {{ expiration_days }} days to complete it.


Sincerely,

bla-bla-bla


Это шаблон письма, которое будет выслано новому юзеру для подтверждения регистрации. {{ expiration_days }} задаётся в settings.py, как ACCOUNT_ACTIVATION_DAYS (у меня это 3).

------ registration_complete.html ------

<h1>Confirmation e-mail sent !<br />
Please check your inbox to complete registration :-) </h1>


Этот шаблон выводится сразу после того, как выслано письмо.

------ activate.html ------

<h1>Confirmation e-mail sent !<br />
Please check your inbox to complete registration :-) </h1>


Этот шаблон выводится сразу после того, как выслано письмо.


В принципе, как только вы создадите эти шаблоны, можно сразу тестировать - по адресу http://ваш_адрес/accounts/register/. После подтверждения регистрации смотрите в админке - появился новый юзер :-)

Сразу можно менять эти шаблоны под свой сайт, и юзать. Нормальный вариант !

Там ещё фичи есть, поэтому "часть 1". Наверное, ещё будут посты на эту тему, так что предусматриваю заранее :-)

11 комментариев:

  1. thanx. Избавил от необходимости ковыряться по коду самостоятельно:). А когда же будет вторая часть про фичи?

    ОтветитьУдалить
  2. Так. Ну фич там несколько - смена пароля и ещё какие-то. Опишу, когда сам воспользуюсь.

    Долго не писал сюда, думал, что никто не читает, так что в основном лично для себя складировал информацию :-)

    ОтветитьУдалить
  3. Спасибо, полезный пост :)

    ОтветитьУдалить
  4. Спасибо, полезный пост =)

    ОтветитьУдалить
  5. ------ registration_complete.html ------

    Этот шаблон выводится сразу после того, как выслано письмо.

    ------ activate.html ------

    Этот шаблон выводится сразу после того, как выслано письмо.

    Повтор, имхо.

    ОтветитьУдалить
  6. ------ registration_complete.html ------

    Этот шаблон выводится сразу после того, как выслано письмо.

    ------ activate.html ------

    Этот шаблон выводится сразу после того, как выслано письмо.

    Повтор, имхо.

    ОтветитьУдалить
  7. Может быть, проверю. Спасибо !

    ОтветитьУдалить
  8. А нельзя ли обойтись без django-registration? Написать регистрацию самому?

    ОтветитьУдалить
  9. Можно конечно, только зачем, если готовое уже есть :-)

    ОтветитьУдалить
  10. Большое спасибо за пост. Но после нажатия на submit у меня вываливается следующая ошибка:

    ImportError at /accounts/register/
    No module named urls

    Request Method: POST
    Request URL: http://localhost:8000/accounts/register/
    Django Version: 1.2.3
    Exception Type: ImportError
    Exception Value: No module named urls
    Exception Location: /usr/lib/python2.6/site-packages/django/utils/importlib.py in import_module, line 35
    Python Executable: /usr/bin/python
    Python Version: 2.6.4

    Но при этом пользователь заводится и e-mail отсылается. С чем это может быть связано?
    Спасибо.

    ОтветитьУдалить
  11. Надо смотреть, почему нет модуля urls:
    Exception Value: No module named urls

    ОтветитьУдалить