Мне нужно сделать очень простую модификацию - потребовать, чтобы определенные представления появлялись только тогда, когда пользователь не прошел аутентификацию - в представлениях по умолчанию django-registration. Например, если я вошел в систему, я не хочу, чтобы пользователи снова могли посетить страницу/register.Индивидуальные представления с django-registration
Итак, я думаю, что идея состоит в том, что я хочу подклассировать вид register
из django-registration. Это именно то, где я не уверен, как действовать дальше. Правильно ли это? Должен ли я проверить статус аутентификации пользователя здесь? Советы и рекомендации приветствуются!
Редактировать
Я думаю, что это правильный путь здесь: Django: Redirect logged in users from login page
Edit 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'),
)
Я сделал большинство из этого уже в моем правлении выше, но я дам его вам. Проверьте эту ссылку, и вы можете увидеть, как он обертывает функцию вокруг другой функции, и если вы пройдете тест, вы перейдете к реальной функции. Мне пришлось использовать те же параметры в моей тестовой функции, что и в 'register', но в остальном это отлично работает. Не нужно дублировать свой код за его пределами. Посмотрите мое второе изменение для кода. –
Да, конечно, вы также можете вызвать исходный вид в своем представлении и вернуть его ответ. На самом деле я делаю то же самое все время. Чтобы это было просто, хотя я не упоминаю об этом здесь. –
С последним и самым лучшим, этот ответ теперь устарел! Теперь представления могут быть подклассифицированы. см. [Django docs] (https://docs.djangoproject.com/en/1.5/topics/class-based-views/intro/) и [django-registration docs] (https: //django-registration.readthedocs .org/ru/последние/views.html) –