распространяясь? Далее = в Джанго-регистрации

StackOverflow https://stackoverflow.com/questions/3176026

  •  02-10-2019
  •  | 
  •  

Вопрос

У меня есть вид, который имеет декоратор @Login_required и поднять страницу, если вы не вошли в систему, он отправляет вас в форму входа в систему с правильным? Далее = / url / you / wrys / to / see

Моя проблема заключается в том, как пройти через это? Следующее значение для последующих форм и электронного письма активации, чтобы, когда пользователь завершает процесс активации, они перенаправлены на представление, которое они первоначально пытались добраться до.

Мой python'foo и django'foo слаб, поэтому, пожалуйста, держите ответ на что-то 5-летний мог следовать;)

Спасибо всем в продвинутых.

Это было полезно?

Решение

Легко, просто сохраните URL-адрес и напишите свое собственное переопределение 2 метода.

Счета / модели

class UserNext(models.Model):
    user = models.OneToOneField(User)
    url = models.CharField(max_length=255, blank=True, null=True)

Учетные записи / NextBackend.py:

from registration.backends.default import DefaultBackend
from django.core.urlresolvers import resolve
from accounts.models import UserNext

class NextBackend(DefaultBackend):

    def register(self, request, **kwargs):
            username, email, password = kwargs['username'], kwargs['email'], kwargs['password1']
            if Site._meta.installed:
                site = Site.objects.get_current()
            else:
                site = RequestSite(request)
            new_user = RegistrationProfile.objects.create_inactive_user(username, email,
                                                                        password, site)
            signals.user_registered.send(sender=self.__class__,
                                         user=new_user,
                                         request=request)

            next, created = UserNext.objects.get_or_create(user=new_user)
            next.url = request.GET.get('next',None) # or POST, don't know how you want to pass it
            next.save()
            return new_user

    def post_activation_redirect(self, request, user):
        next = UserNext.objects.get(user=user)
        view, args, kwargs = resolve(next.url)
        return (view, args, kwargs)

Пользователь Это ^ Backend как ваша регистрация Backend в учетных записях / просмотр .py:

def custom_register(request):
            return register(request, backend='accounts.nextbackend.NextBackend',)

URLS.PY:

url(r'^accounts/register/$', 'accounts.views.custom_register', name='registration_register'),

Должен работать, не проверил его, написал на лету. Очевидно, потребуется добавление некоторых импорта.

Другие советы

Встроенный вид обрабатывает это по умолчанию. Убедитесь, что у вас есть этот кусок кода: <input type="hidden" name="next" value="{{ next }}" /> в вашем шаблоне страницы входа.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top