Установка и использование django-регистрации
Ранее я использовал более старую версию django-registration, которая, похоже, устарела. Поскольку мой сервер не позволяет мне устанавливать плагины Python, мне нужно использовать "регистрацию" как отдельное приложение django. Теперь мой вопрос: что мне нужно изменить, чтобы регистрация работала как django-app? Могу ли я просто скопировать "регистрацию" в мой каталог проекта django, добавить его в настройках, и оно должно работать? Раньше не было такого понятия, как 'backend', теперь файл инициализации backend с функцией get_backend, который принимает 'path' в качестве аргумента. Я думаю, этот путь отправляется через URL, верно?
url(r'^activate/(?P<activation_key>\w+)/$',
activate,
{'backend': 'registration.backends.default.DefaultBackend'},
name='registration_activate'),
Внутри этого каталога также есть файл инициализации с классом DefaultBackend, в котором классы активируются и регистрируются.
http://paste.pocoo.org/show/225790/
Они оба используют сигналы. Нужно ли мне как-то беспокоиться об этих сигналах? (Я все еще не совсем понимаю, для чего они используются). Последнее. Ранее после регистрации он перенаправлял либо заданный success_url, либо задавал шаблон таким образом:
return HttpResponseRedirect(success_url or reverse('registration_complete'))
Теперь код отвечает за это выглядит:
if success_url is None:
to, args, kwargs = backend.post_registration_redirect(request, new_user)
return redirect(to, *args, **kwargs)
else:
return redirect(success_url)
и post_registration_redirect:
def post_registration_redirect(self, request, user):
"""
Return the name of the URL to redirect to after successful
user registration.
"""
return ('registration_complete', (), {})
Так почему же это изменилось таким образом, если оно все еще просто перенаправлялось на "registration_complete"? Арги и кварги пусты, так зачем?
2 ответа
Ситуация намного проще, чем вы ее представляете. Приложения Django (такие как регистрация) являются обычными пакетами Python и могут быть импортированы как таковые. Это означает, что регистрация может жить где угодно, уже в вашем пути к Python. Часто самое простое место для этого находится в корневом каталоге проекта.
Аргумент бэкэнда там просто принимает путь импорта python. Аргумент был добавлен, чтобы люди могли расширять Django-Registration для использования пользовательских бэкэндов, если они того пожелают.
Если вы поместите каталог регистрации в путь к Python, существующая строка будет работать нормально.
Цитата:
"Because my server does not allow me to install python plugins I need to
use 'registration' as separate django application."
Это потому что у вас нет root-доступа? Вы пытались использовать virtualenv (ссылка на мой блог) для создания собственной (полностью записываемой) установки Python/Django? Или создать каталог для записи в месте, где у вас есть права на запись, установить там django-registration и указать PYTHON_PATH в этом месте?
IMO, похоже, вы слишком быстро отказались от опции "установить django-registration" и перешли к более сложному "запустить его на другом сервере".