8

Używam aplikacji do rejestracji django, aby zaimplementować stronę rejestracji użytkownika dla mojej witryny. Użyłem backends.imple poglądów Django, który pozwala użytkownikom na natychmiastowe logowanie po rejestracji. Moje pytanie brzmi: jak mogę przekierować je na stronę mojej drugiej aplikacji znajdującą się w tym samym katalogu, co projekt.Jak przekierować użytkowników do określonego adresu URL po rejestracji w rejestracji django?

Oto co moim głównym urls.py wygląda następująco:

from django.conf.urls import patterns, include, url 

# Uncomment the next two lines to enable the admin: 
# from django.contrib import admin 
# admin.autodiscover() 

urlpatterns = patterns('', 

    url(r'^accounts/', include('registration.backends.simple.urls')), 
    url(r'^upload/', include('mysite.fileupload.urls')), 
    # Examples: 
    # url(r'^$', 'mysite.views.home', name='home'), 
    # url(r'^mysite/', include('mysite.foo.urls')), 

    # Uncomment the admin/doc line below to enable admin documentation: 
    # url(r'^admin/doc/', include('django.contrib.admindocs.urls')), 

    # Uncomment the next line to enable the admin: 
    # url(r'^admin/', include(admin.site.urls)), 
) 

import os 
urlpatterns += patterns('', 
     (r'^media/(.*)$', 'django.views.static.serve', {'document_root': os.path.join(os.path.abspath(os.path.dirname(__file__)), 'media')}), 
) 

FileUpload to nazwa drugiej aplikacji mam w mysite Directory Project.

To właśnie backends.simple.urls wygląda następująco:

""" 
URLconf for registration and activation, using django-registration's 
one-step backend. 

If the default behavior of these views is acceptable to you, simply 
use a line like this in your root URLconf to set up the default URLs 
for registration:: 

    (r'^accounts/', include('registration.backends.simple.urls')), 

This will also automatically set up the views in 
``django.contrib.auth`` at sensible default locations. 

If you'd like to customize registration behavior, feel free to set up 
your own URL patterns for these views instead. 

""" 


from django.conf.urls import include 
from django.conf.urls import patterns 
from django.conf.urls import url 
from django.views.generic.base import TemplateView 

from registration.backends.simple.views import RegistrationView 


urlpatterns = patterns('', 
         url(r'^register/$', 
          RegistrationView.as_view(), 
          name='registration_register'), 
         url(r'^register/closed/$', 
          TemplateView.as_view(template_name='registration/registration_closed.html'), 
          name='registration_disallowed'), 
         (r'', include('registration.auth_urls')), 
         ) 

A oto backends.simple.views:

from django.conf import settings 
from django.contrib.auth import authenticate 
from django.contrib.auth import login 
from django.contrib.auth.models import User 

from registration import signals 
from registration.views import RegistrationView as BaseRegistrationView 


class RegistrationView(BaseRegistrationView): 
    """ 
    A registration backend which implements the simplest possible 
    workflow: a user supplies a username, email address and password 
    (the bare minimum for a useful account), and is immediately signed 
    up and logged in). 

    """ 
    def register(self, request, **cleaned_data): 
     username, email, password = cleaned_data['username'], cleaned_data['email'], cleaned_data['password1'] 
     User.objects.create_user(username, email, password) 

     new_user = authenticate(username=username, password=password) 
     login(request, new_user) 
     signals.user_registered.send(sender=self.__class__, 
            user=new_user, 
            request=request) 
     return new_user 

    def registration_allowed(self, request): 
     """ 
     Indicate whether account registration is currently permitted, 
     based on the value of the setting ``REGISTRATION_OPEN``. This 
     is determined as follows: 

     * If ``REGISTRATION_OPEN`` is not specified in settings, or is 
      set to ``True``, registration is permitted. 

     * If ``REGISTRATION_OPEN`` is both specified and set to 
      ``False``, registration is not permitted. 

     """ 
     return getattr(settings, 'REGISTRATION_OPEN', True) 

    def get_success_url(self, request, user): 
     return (user.get_absolute_url(),(), {}) 

Próbowałem zmiany funkcji get_success_url po prostu powrót adres URL, który chcę/upload/new, ale nadal przekierowywał mnie do użytkowników/wstawić nazwę użytkownika stronę i dał błąd. Jak mogę przekierować użytkownika do strony wysyłania/nowej strony, w której druga aplikacja znajduje się po rejestracji?

Odpowiedz

17

Nie zmieniaj kodu w module registration. Zamiast tego podklasuj metodę RegistrationView i zastąp metodę get_success_url, aby zwrócić wybrany adres URL.

from registration.backends.simple.views import RegistrationView 

class MyRegistrationView(RegistrationView): 
    def get_success_url(self, request, user): 
     return "/upload/new" 

Wtedy to swój własny pogląd rejestracji w głównym urls.py, zamiast w tym proste adresy URL backend.

urlpatterns = [ 
    # your custom registration view 
    url(r'^register/$', MyRegistrationView.as_view(), name='registration_register'), 
    # the rest of the views from the simple backend 
    url(r'^register/closed/$', TemplateView.as_view(template_name='registration/registration_closed.html'), 
          name='registration_disallowed'), 
    url(r'', include('registration.auth_urls')), 
] 
+0

Gdzie dokładnie umieszczam klasę MyRegistrationView? Czy działa on w pliku views.py w folderze backend.simple lub w folderze rejestracyjnym? – user2476295

+1

Jak już powiedziałem, nie należy zmieniać kodu w module rejestracji. Znacznie trudniej byłoby przejść na kolejną wersję rejestracji django. Możesz umieścić lekcję w pliku views.py Twojej aplikacji. Możesz dodać go do 'urls.py', jeśli wolisz, ponieważ ma tylko trzy linie. – Alasdair

+0

Próbowałem więc umieścić oba bloki kodu w backends.simple.urls.py Ponieważ główny plik urls.py w folderze projektu wywołuje funkcję simple.urls, jak widać z góry.Nadal nie działa i przekierowuje na stronę użytkownik/nazwa użytkownika zaraz po rejestracji (nie logowaniu). – user2476295

0

Jeśli chcesz, możesz zmodyfikować następujący plik /usr/local/lib/python2.7/dist-packages/registration/backends/simple/urls.py, zmieniając ścieżkę, na przykład :

przed modyfikacją:

success_url = getattr (ustawienia 'SIMPLE_BACKEND_REDIRECT_URL', '/'),

Po modyfikacji:

success_url = getattr (Ustawienia 'SIMPLE_BACKEND_REDIRECT_URL', '/ upload/nowy'),

Pozdrawiam.

Diego

Powiązane problemy