9

django.contrib.auth의 멋진 기능이 있습니다 : login_required으로 장식 된 페이지에 액세스하려고하면 next 인수로 로그인 페이지로 리디렉션됩니다 , 로그인 한 후에는 원래 액세스하려는 페이지로 리디렉션됩니다. 사용자 흐름에 좋습니다.원래 방문하려고했던 페이지로`django-registration`을 보내면

그러나, 분명히 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'],(), {}) 

있는지 장고 등록 사실이 백엔드를 사용하기 위해, 우리는 우리의 urls.py를 통해 뷰에 제공 가입하거나 전자 메일을 통해 활성화 할 때? –

+0

가입 후 전자 메일로 활성화하면 정품 인증을 마친 후 원래 방문한 페이지로 리디렉션 될 것으로 예상됩니다. –

답변

12

이메일 (registration.views.activate)를 통해 계정의 활성화에 대응하는 뷰 당신이하는 success_url 매개 변수를 받아들이는 것을 볼 수 있습니다 보면 "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://..." 
      ), 

장고 - 등록은 자신의 관점에서보기를 활성화하고 리디렉션하는 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) 

템플릿에서 registration/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가 무국적자.

첫 번째 제안 사항은 등록시 세션 변수에 리디렉션을 저장 한 다음 활성화 할 때 리디렉션을 검색하는 것입니다.이를 위해 우리는 (등록 절차의 기능을 간략하게 설명하고, 뷰에서 호출하는 방법과 단지 클래스) 장고 - 등록 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

이것은 두 번째 부분입니다. 첫 번째 절반은 올바른 '다음'URL을 등록한 사람과 연결하는 것입니까? –

+0

무슨 뜻인지 이해할 수 없다 –

+0

요점은 사용자가 원래 방문하려고 시도한 뷰로 리디렉션하는 것이지, 지속적인 URL로 리디렉션하지 않는 것입니다. 그러면 사용자가 원래 방문하려고했던 URL을 저장 한 다음 나중에 검색하는 방법은 무엇입니까? –

-4

당신은 @login_required와 같은 데코레이터를 사용해야합니다. django-registration도 그렇게 사용합니다.

+0

그러면 방문한 원래 페이지로 등록한 후 사용자가 리디렉션됩니까? –