Индивидуальные просмотры с django-регистрацией - PullRequest
2 голосов
/ 31 августа 2011

Мне нужно сделать очень простое изменение - требовать, чтобы определенные представления отображались только тогда, когда пользователь не аутентифицирован, - к представлениям по умолчанию для django-регистрации. Например, если я вошел в систему, я не хочу, чтобы пользователи могли снова посещать страницу / register.

Итак, я думаю, что идея заключается в том, что я хочу выделить подкласс register из django-registration. Это как раз то, где я не уверен, как поступить. Это правильное направление? Должен ли я проверить статус аутентификации пользователя здесь? Советы и советы приветствуются!

Редактировать

Я думаю, что это правильный путь: Django: Перенаправление авторизованных пользователей со страницы входа

Редактировать 2

Решение:

Создайте другое приложение, например, custom_registration, и напишите вид, подобный этому (мой также использует пользовательскую форму):

from registration.views import register
from custom_registration.forms import EduRegistrationForm

def register_test(request, success_url=None,
             form_class=EduRegistrationForm, profile_callback=None,
             template_name='registration/registration_form.html',
             extra_context=None):
    if request.user.is_authenticated():
        return HttpResponseRedirect('/')
    else:
        return register(request, success_url, form_class, profile_callback, template_name, extra_context)

Мне пришлось использовать те же параметры функции, но в остальном просто включить тест, и если мы его пройдем, перейдем к основной функции.

Не забудьте также поместить это в свой URLConf (опять же, это включает в себя и некоторые вещи о моей пользовательской форме):

URLConf верхнего уровня

(r'^accounts/', include('custom_registration.urls')),
(r'^accounts/', include('registration.urls')),

custom_registration.views

from django.conf.urls.defaults import *
from custom_registration.views import register_test
from custom_registration.forms import EduRegistrationForm

urlpatterns = patterns('',
    url(r'^register/$', register_test, {'form_class': EduRegistrationForm}, name='registration.views.register'),
)

1 Ответ

5 голосов
/ 31 августа 2011

Насколько я помню, django-registration использует функциональные представления, поэтому вы не можете их подклассить.Подход, которым я обычно придерживаюсь, заключается в «перезаписи» исходных представлений (конечно, без изменения приложения django-registration).Это работает так:

  1. Создайте другое приложение (вы можете назвать его custom_registration или как хотите)
  2. Это приложение должно содержать другое urls.py, а в вашем случае другое views.py
  3. Скопируйте исходный код вида register в свой новый views.py и измените его, добавьте шаблон в urls.py, чтобы указать на это представление (используйте тот же шаблон URL, что и в django-registration дляэто представление)
  4. Поместите include в свои проекты urls.py вашего нового приложения urls.py до , в том числе оригинальное приложение для регистрации django.Например, это может выглядеть так:
urlpatterns = patterns('', 
    ...
    url(r'^accounts/', include('custom_registration.urls')),
    url(r'^accounts/', include('registration.backends.default.urls')),
    ... 
)

Это просто работает, поскольку первый соответствующий шаблон URL для /accounts/register будет указывать на ваше новое приложение, поэтому он никогда не будетпопробуйте позвонить из оригинального приложения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...