8

私は自分のサイトのユーザー登録ページを実装するためにdjango登録アプリを使用しています。私はDjangoのバックエンドを使用しました。ユーザーはすぐに登録後にログインすることができます。私の質問は、プロジェクトと同じディレクトリにある私の他のアプリのページにそれらをリダイレクトする方法です。django登録の登録後、特定のURLにユーザをリダイレクトする方法は?

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

ファイルアップロードは、私はプロジェクトディレクトリの個人用サイトを持っている他のアプリの名前である:ここで

は次のように私のメインのurls.pyが見えるものです。

これは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" 

そして、代わりにシンプルなバックエンドのURLなどの、あなたのメイン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-registrationの次のバージョンにアップグレードするのはずっと難しくなります。自分のアプリのviews.pyにクラスを置くことができます。あなたが望むのであれば、 'urls.py'にそれを含めることができます。なぜなら3行しかないからです。 – 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

関連する問題