Раз есть юзеры, значит, их нужно как-то регистрировать :-)
Для этого предназначен django-registration.
Работает так:
- юзер по адресу http://ваш_адрес/accounts/register/ заполняет форму с 4 полями: "username", "email address", "password", "password (again)".
- юзеру отсылается мыло с линком для активации учётной записи.
- юзер кликает линк, учётная запись активируется.
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". Наверное, ещё будут посты на эту тему, так что предусматриваю заранее :-)
thanx. Избавил от необходимости ковыряться по коду самостоятельно:). А когда же будет вторая часть про фичи?
ОтветитьУдалитьТак. Ну фич там несколько - смена пароля и ещё какие-то. Опишу, когда сам воспользуюсь.
ОтветитьУдалитьДолго не писал сюда, думал, что никто не читает, так что в основном лично для себя складировал информацию :-)
Спасибо, полезный пост :)
ОтветитьУдалитьСпасибо, полезный пост =)
ОтветитьУдалить------ registration_complete.html ------
ОтветитьУдалитьЭтот шаблон выводится сразу после того, как выслано письмо.
------ activate.html ------
Этот шаблон выводится сразу после того, как выслано письмо.
Повтор, имхо.
------ registration_complete.html ------
ОтветитьУдалитьЭтот шаблон выводится сразу после того, как выслано письмо.
------ activate.html ------
Этот шаблон выводится сразу после того, как выслано письмо.
Повтор, имхо.
Может быть, проверю. Спасибо !
ОтветитьУдалитьА нельзя ли обойтись без django-registration? Написать регистрацию самому?
ОтветитьУдалитьМожно конечно, только зачем, если готовое уже есть :-)
ОтветитьУдалитьБольшое спасибо за пост. Но после нажатия на 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 отсылается. С чем это может быть связано?
Спасибо.
Надо смотреть, почему нет модуля urls:
ОтветитьУдалитьException Value: No module named urls