2011-10-28 10 views
9

django.contrib.auth पर जाने का प्रयास करने के लिए 'django-पंजीकरण` प्राप्त करना एक शानदार विशेषता है: जब आप login_required द्वारा सजाए गए किसी पृष्ठ तक पहुंचने का प्रयास करते हैं, तो आपको next तर्क के साथ लॉगिन पृष्ठ पर रीडायरेक्ट किया जाता है , इसलिए लॉगिन करने के बाद आप उस पृष्ठ पर रीडायरेक्ट हो जाते हैं जिसे आप मूल रूप से एक्सेस करने का प्रयास कर रहे थे। यह उपयोगकर्ता प्रवाह के लिए अच्छा है।आपको जिस पृष्ठ पर मूल रूप से

लेकिन, स्पष्ट रूप से django-registration समान सुविधा प्रदान नहीं करता है। मुझे उम्मीद है कि यदि आप लॉगिन के बजाय पंजीकरण करते हैं, तो आपको next चीज़ भी मिल जाएगी, और पंजीकरण-एन-सक्रिय करने के बाद आपको उस पृष्ठ पर रीडायरेक्ट किया जाएगा जिसे आप मूल रूप से देखने का प्रयास कर रहे थे। ऐसा नहीं है, आप बस कुछ सफलता पृष्ठ पर रीडायरेक्ट कर रहे हैं। यह प्रवाह दर्द होता है।

क्या django-registration शायद यह विकल्प प्रदान करता है लेकिन मैं इसका उपयोग या सही तरीके से नहीं कर रहा हूं? या ऐसा करने का कोई आसान तरीका है?

+0

आप क के बारे में बात कर रहे हैं:

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'],(), {}) 

और यह सुनिश्चित करें Django पंजीकरण वास्तव में इस बैकएंड का उपयोग करता है बनाने के लिए, हम यह हमारे urls.py के माध्यम से विचारों को प्रदान करते हैं क्या आप साइनअप करते हैं, या जब आप ईमेल के माध्यम से सक्रिय करते हैं? –

+0

साइन अप करने के बाद, आप ईमेल द्वारा सक्रिय करते हैं, और फिर जब आप सक्रियण पूरा करते हैं तो मुझे उम्मीद है कि आप उस पृष्ठ पर रीडायरेक्ट हो जाएंगे जिसे आप मूल रूप से देखने का प्रयास कर रहे थे। –

उत्तर

12

आप दृश्य ईमेल (registration.views.activate) के माध्यम से एक खाते के सक्रियण के लिए जिम्मेदार आपको लगता है कि यह एक success_url पैरामीटर है जो स्वीकार करता देखेंगे को देखें, तो "किसी URL पैटर्न के नाम पर सफल सक्रियण पर पर रीडायरेक्ट करने। "

तो आपको बस उस यूआरएल को ओवरराइट करना होगा जो उस दृश्य को कॉल करता है और वह पृष्ठ प्रदान करता है जिसे आप रीडायरेक्ट करना चाहते हैं।

अपनी खुद की urls.py में

तो: क्या आप लपेट सकता है

from registration.views import activate 
urlpatterns = patterns('', 
    url(r'^activate/(?P<activation_key>\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://..." 
      ), 

वैकल्पिक रूप से Django-पंजीकरण अपने स्वयं के दृश्य में दृश्य को सक्रिय करने और पर रीडायरेक्ट करने गए एक GET पैरामीटर स्वीकार करते हैं:

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) 

अब, आपके टेम्पलेट में पंजीकरण/activation_email.html आप लिंक पर पुनर्निर्देशन स्थान जोड़ सकते हैं:

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

Thanks! .... 

{% autoescape off %} 
<a href="http://{{ site.domain }}{{ a_url }}?next='http://somepage_or_url'"> 
    http://{{ site.domain }}{{ url_registration_activate }}/ 
</a> 
{% endautoescape %} 

Thanks! 

संपादित

ठीक है, इतनी मेहनत से कोडित रीडायरेक्ट के साथ ऊपर से संबंधित है। मेरा अनुमान है कि इस प्रवाह में आप चाहते है:

  1. उपयोगकर्ता एक पेज
  2. उपयोगकर्ता उस पृष्ठ पर अप कि प्रवेश करें/पंजीकरण पृष्ठ पर रीडायरेक्ट कर दिया जाता
  3. उपयोगकर्ता चिन्ह और एक ई-मेल भेजा जाता है के लिए जाने की कोशिश करता है
  4. उपयोगकर्ता ईमेल को सक्रिय करता है और

यह और अधिक कठिन पेज के रूप में वे कदम एक सभी तरह चार और के रूप में कदम को पास करने की जरूरत में देखने की कोशिश कर रहे थे देखने के लिए मूल पृष्ठ वे करने की कोशिश की पर पुनः निर्देशित हो जाता है हम जानते हैं, HTTP है राज्यविहीन।

पहला सुझाव जो दिमाग में आता है, जब आप पंजीकरण करते हैं तो एक सत्र चर में रीडायरेक्ट को सहेजना है और फिर सक्रिय करते समय इसे पुनर्प्राप्त करना है।ऐसा करने के लिए हम Django-पंजीकरण default backend (जो सिर्फ तरीकों कि पंजीकरण की प्रक्रिया की कार्यक्षमता रूपरेखा और विचारों से कहा जाता है के साथ एक वर्ग है), विशेष रूप से रजिस्टर और post_activation_redirect तरीकों के ऊपर लिख सकते हैं:

custom_backend.py

url(r'^activate/(?P<activation_key>\w+)/$', 
    activate, 
    {'backend': 'custombackend.RedirectBackend'}, 
    name='registration_activate'), 
url(r'^register/$', 
    register, 
    {'backend': 'custombackend.RedirectBackend'}, 
    name='registration_register'), 
+0

यह दूसरा आधा है। पहली छमाही के बारे में क्या, पंजीकरण करने वाले व्यक्ति के साथ सही 'अगला' यूआरएल कनेक्ट करना? –

+0

मुझे समझ में नहीं आता कि आपका क्या मतलब है –

+0

बिंदु उस दृश्य को रीडायरेक्ट करना है जिसे उपयोगकर्ता ने मूल रूप से निरंतर यूआरएल के लिए नहीं जाने का प्रयास किया था। तो आप कैसे सहेजेंगे और बाद में उस URL को पुनर्प्राप्त करेंगे जिसे उपयोगकर्ता ने मूल रूप से देखने का प्रयास किया था? –

-4

आपको उसी सजावट का उपयोग करना चाहिए @login_required, django-registration इसका भी उपयोग करता है।

+0

और क्या वह उस मूल पृष्ठ पर पंजीकरण के बाद उपयोगकर्ता को रीडायरेक्ट कर देगा जिससे वे यात्रा करने का प्रयास कर रहे थे? –

संबंधित मुद्दे

 संबंधित मुद्दे