Dastlab siz tashrif buyurmoqchi bo'lgan sahifaga jo'natish uchun "django-ro'yxatdan o'tish" ni olish

django.contrib.auth has an awesome feature: When you try to access a page that's decorated by login_required, you get redirected to the login page with a next argument, so after you login you get redirected back to the page you were originally trying to access. That's good for the user flow.

But, apparently django-registration does not provide a similar feature. I expected that if you register instead of login, you would also get a next thing, and after registering-n'-activating you'll get redirected to the page you were originally trying to visit. This is not the case, you're just redirected to some success page. This hurts the flow.

django-registration bu parametrni berishi mumkin, lekin men uni yoki to'g'ri foydalanmayapmanmi? Yoki buning oson yo'li bormi?

9
Siz ro'yxatdan o'tgandan so'ng, siz elektron pochta orqali faollashasiz va faollashtirishni tugatgandan so'ng siz tashrif buyurmoqchi bo'lgan sahifaga yo'naltirilasiz.
qo'shib qo'ydi muallif Ram Rachum, manba
Siz ro'yxatdan o'tish paytida yoki elektron pochtangiz orqali faollashayotganingizda gapirasizmi?
qo'shib qo'ydi muallif Timmy O'Mahony, manba

2 javoblar

Hisobni aktivlashtirish uchun mas'ul bo'lgan elektron pochta orqali qaraydigan bo'lsangiz ( ro'yxatdan o'tishingiz.views.activate ) siz "muvaffaqiyatli aktivlashtirishga yo'naltirish uchun URL naqshlarining nomi" success_url parametrini qabul qilganini ko'rasiz.

Shunday ekan, ushbu ko'rinishni chaqiradigan va qayta yo'naltirishni istagan sahifani taqdim etgan urlni qayta yozishingiz kerak bo'ladi.

Shuning uchun o'zingizning urls.py :

from registration.views import activate
urlpatterns = patterns('',
    url(r'^activate/(?P\w+)/$',
            activate,
            {'backend': 'registration.backends.default.DefaultBackend'},
            name='registration_activate',
            # You could use reverse() here instead of a URL to be DRY'er
            success_url = "http://..." 
            ),

Shu bilan bir qatorda, django-registratsiyani o'z ko'rinishida faollashtirishi va quyidagilarni yo'naltirish uchun GET parametrini qabul qilishingiz mumkin:

from registration.view import activate
def custom_activate(request, backend,
         template_name='registration/activate.html',
         success_url=None, extra_context=None, **kwargs):
    success_url = request.GET.get('next', None)
    return activate(request, template_name=template_name, success_url=success_url, extra_context=None, **kwargs)

Endi ro'yhatdan o'tish/activation_email.html shablonida havolaga yo'naltirish manzilini havolaga qo'shishingiz mumkin:

{% url 'registration.view.activate' activation_key as a_url %}

Thanks! ....

{% autoescape off %}

    http://{{ site.domain }}{{ url_registration_activate }}/

{% endautoescape %}

Thanks!

EDIT -ni tanlang

OK, shuning uchun yuqoridagi kodlar qattiq kodlangan yo'nalishlar bilan bog'liq. Men buni siz istagan oqim deb bilaman:

  1. Foydalanuvchining sahifaga o'tishga harakat qiladi
  2. Foydalanuvchiga kirish/ro'yxatga olish sahifasiga qayta yo'naltiriladi
  3. Foydalanuvchi ushbu sahifaga kirib, elektron pochtani yuboradi.
  4. Foydalanuvchi e-pochtani faollashtiradi va ko'rishni xohlagan asl sahifaga yo'naltiriladi.

Bu juda qiyin, chunki ular bir qadamda ko'rib chiqmoqchi bo'lgan sahifalar to'rtinchi bosqichga o'tishga to'g'ri keladi va bilamizki, HTTP fuqaroligi yo'q.

Aqlga keladigan birinchi taklif - ro'yxatdan o'tishingiz paytida sessiya o'zgaruvchisida qayta yo'naltirishni saqlab qo'yish va faollashtirgandan keyin uni qayta tiklash. Buning uchun biz django-registratsiyasini asl nusxasini yozishi mumkin. bu ro'yxatga olish jarayonining funktsional xususiyatlarini aks ettiruvchi usullarni o'z ichiga olgan va sinflardan iborat bo'lgan sinf), xususan, ro'yxatga olish va post_activation_redirect usullari:

custom_backend.py

from registration.backends.default import DefaultBackend
class RedirectBackend(DefaultBackend):
    def register(self, request, **kwargs):
        request.session['redirect'] = request.GET.get("next",None)
        super(RedirectBackend, self).register(request, **kwargs)

    def post_activation_redirect(self, request, user):
        return(request.session['redirect'], (), {})

va django-ro'yxatga olishda ushbu orqa tarafdan foydalanilganiga ishonch hosil qilish uchun uni urls.py orqali ko'rib chiqamiz:

url(r'^activate/(?P\w+)/$',
    activate,
    {'backend': 'custombackend.RedirectBackend'},
    name='registration_activate'),
url(r'^register/$',
    register,
    {'backend': 'custombackend.RedirectBackend'},
    name='registration_register'),
12
qo'shib qo'ydi
Bu ikkinchi yarm. Ro'yxatga qo'yilgan shaxs bilan to'g'ri keyingi URLni ulab, birinchi yarmi haqida nima deyish mumkin?
qo'shib qo'ydi muallif Ram Rachum, manba
Bu nuqta, foydalanuvchining doimiy URL ga emas, balki birinchi marta tashrif buyurishga harakat qilayotgan ko'rinishiga yo'naltirishdir. Xo'sh, foydalanuvchining dastlabki tashrif buyuradigan URL manzilini qanday qilib saqlab qolasiz va keyinroq olasiz?
qo'shib qo'ydi muallif Ram Rachum, manba
Nima demoqchi ekanini tushunmayapman
qo'shib qo'ydi muallif Timmy O'Mahony, manba
Faollashtirishdan so'ng dinamik URL bilan (masalan, foydalanuvchining aslida ko'rishni xohlagan url) faollashtiradigan yondashuv bilan mening javobimni yangiladim
qo'shib qo'ydi muallif Timmy O'Mahony, manba

Shu dekoratordan foydalanishingiz kerak @login_required, django-qayddan foydalanadi.

4
qo'shib qo'ydi
Va bu foydalanuvchini ro'yxatga olingandan so'ng, ular tashrif buyurmoqchi bo'lgan dastlabki sahifaga yo'naltirilishiga sabab bo'ladimi?
qo'shib qo'ydi muallif Ram Rachum, manba
Python
Python
372 ishtirokchilar

Bu guruh python dasturlash tilini muhokama qilish uchun. Iltimos, o'zingizni hurmat qiling va faqat dasturlash bo'yicha yozing. Botlar mavzusini @botlarhaqida guruhida muhokama qling! FAQ: @PyFAQ Offtopic: @python_uz_offtopic

Python offtopic group !
Python offtopic group !
150 ishtirokchilar

@python_uz gruppasining offtop gruppasi. offtop bo'lsa ham reklama mumkin emas ) Boshqa dasturlash tiliga oid gruppalar @languages_programming