8

Поэтому я использую приложение регистрации django для реализации страницы регистрации пользователя для моего сайта. Я использовал backend.simple Django, который позволяет пользователям немедленно войти в систему после регистрации. Мой вопрос: как перенаправить их на страницу моего другого приложения, расположенную в том же каталоге, что и проект.Как перенаправить пользователей на определенный URL-адрес после регистрации в регистрации django?

Вот что мой главный urls.py выглядит следующим образом:

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 это имя другого приложения Я имею в директории проекта MySite.

Это то, что backends.simple.urls выглядит следующим образом:

""" 
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')), 
         ) 

А вот 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(),(), {}) 

Я попытался изменения функции get_success_url, чтобы просто вернуться url Я хочу, который/upload/new, но он по-прежнему перенаправил меня пользователям/вставьте имя пользователя и сообщила об ошибке. Как перенаправить пользователя на страницу загрузки/новой страницы, где находится другое приложение после регистрации?

ответ

17

Не изменяйте код в модуле registration. Вместо этого подкласс RegistrationView и переопределите метод get_success_url, чтобы вернуть нужный URL.

from registration.backends.simple.views import RegistrationView 

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

Затем включить свой собственный вид регистрации в вашем главном urls.py, вместо того, чтобы в том числе простых серверных URLs.

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

Где именно я размещаю класс MyRegistrationView? Происходит ли она на view.py в папке backend.simple или в папке регистрации? – user2476295

+1

Как я сказал выше, не изменяйте код в модуле регистрации. Это значительно облегчило бы переход на следующую версию django-registration. Вы можете поместить класс в одно из ваших видов view.py вашего собственного приложения. Вы можете включить его в 'urls.py', если хотите, поскольку это всего лишь три строки. – Alasdair

+0

Итак, я попробовал это, я поместил оба блока кода в файл backends.simple.urls.py. Поскольку основной файл urls.py в моей папке проекта вызывает вызов simple.urls, как вы можете видеть сверху.Он по-прежнему не работает и перенаправляется на страницу пользователя/пользователя сразу после регистрации (не для входа в систему) – user2476295

0

Если вы хотите, вы можете изменить следующий файл /usr/local/lib/python2.7/dist-packages/registration/backends/simple/urls.py, изменяя путь, например :

Перед изменением:

success_url = GetAttr (настройки, 'SIMPLE_BACKEND_REDIRECT_URL', '/'),

После модификации:

success_url = GetAttr (настройки, 'SIMPLE_BACKEND_REDIRECT_URL', '/ загрузки/новый'),

С уважением.

Diego