2013-07-17 129 views
8

所以我使用django註冊應用程序來實現我的網站的用戶註冊頁面。我使用了Django的後端簡單視圖,允許用戶在註冊後立即登錄。我的問題是如何將它們重定向到與項目位於同一目錄中的其他應用程序的頁面。如何在django註冊後註冊後將用戶重定向到特定的url?

這裏是我的主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')}), 
) 

文件上傳是其他應用程序,我必須在項目目錄的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功能,只是回報我想要的網址是/ upload/new,但它仍然將我重定向到用戶/ 插入用戶名頁面並出現錯誤。如何在註冊後將用戶重定向到其他應用程序所在的上傳/新頁面?

回答

17

不要更改registration模塊中的代碼。相反,子類RegistrationView,並覆蓋get_success_url方法返回你想要的網址。

from registration.backends.simple.views import RegistrationView 

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

然後在您的主urls.py您的自定義視圖的註冊,而不是包括簡單的後端的網址。

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類?它是繼續在backend.simple文件夾中的views.py還是註冊文件夾中的views.py? – user2476295

+1

正如我上面所說的,不要更改註冊模塊中的代碼。如果升級到下一個版本的django註冊,它會變得非常困難。您可以將該類放入您自己的應用程序的views.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