سؤال

لديّ طريقة عرض يحتوي على @ @legin_required وعند سحب الصفحة ، إذا لم يتم تسجيل الدخول إليها ، فهل يرسلك إلى نموذج تسجيل الدخول باستخدام الصحيح؟ التالي =/url/you/to/to/see

مشكلتي هي كيفية نقل هذا؟ القيمة التالية إلى النماذج اللاحقة والبريد الإلكتروني للتنشيط بحيث عندما يكمل المستخدم عملية التنشيط ، يتم إعادة توجيههم إلى العرض الذي حاولوا الوصول إليه في الأصل.

إن بيثونفو وجانغوفو ضعيف ، لذا يرجى الاحتفاظ بالإجابة على شيء يمكن أن يتبعه طفل يبلغ من العمر 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)

المستخدم هذا^ الواجهة الخلفية كواجهة التسجيل الخاصة بك في الحسابات/views.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