8

Also verwende ich django-Registrierung App, um eine Benutzerregistrierungsseite für meine Website zu implementieren. Ich benutzte Djangos Backends. Einfache Ansichten, die den Benutzern erlauben, sich sofort nach der Registrierung anzumelden. Meine Frage ist, wie leite ich sie auf die Seite meiner anderen App um, die sich im selben Verzeichnis wie das Projekt befindet. HierWie können Benutzer nach der Registrierung in der Django-Registrierung zu einer bestimmten URL weitergeleitet werden?

ist, was mein Haupt urls.py wie folgt aussieht:

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 der Name des anderen App, die ich im Projektverzeichnis mysite habe.

Dies ist, was die backends.simple.urls wie folgt aussieht:

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

Und hier ist die 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(),(), {}) 

Ich habe versucht, die die get_success_url Funktion nur Rückkehr zu ändern die URL, die ich will, ist/upload/neu, aber es hat mich immer noch an die Benutzer/umgeleitet Benutzername einfügen Seite und gab einen Fehler. Wie leite ich den Nutzer auf die Upload-/neue Seite weiter, auf der sich die andere App nach der Registrierung befindet?

Antwort

17

Den Code im Modul registration nicht ändern. Unterklassieren Sie stattdessen die RegistrationView und überschreiben Sie die get_success_url Methode, um die gewünschte URL zurückzugeben.

from registration.backends.simple.views import RegistrationView 

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

schließen Sie dann Ihre Ansicht individuelle Registrierung in der Haupt urls.py, anstatt den einfachen Backend Urls einschließlich.

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

Wo genau stelle ich die Klasse MyRegistrationView? Geht es auf die ansichten.py im backend.simple-ordner oder die im registrierungsordner? – user2476295

+1

Wie oben erwähnt, ändern Sie nicht den Code im Registrierungsmodul. Es würde es viel schwieriger machen, auf die nächste Version der Django-Registrierung zu aktualisieren. Sie können die Klasse in eine der Ansichten von view.py Ihrer eigenen App einfügen. Sie können es in das "urls.py" aufnehmen, wenn Sie möchten, da es nur drei Zeilen lang ist. – Alasdair

+0

Also habe ich versucht, die beiden Code-Blöcke in die backends.simple.urls.py zu legen. Da die Hauptdatei urls.py in meinem Projektordner einen Aufruf an die simple.urls macht, wie Sie von oben sehen können.Es funktioniert immer noch nicht und leitet direkt nach der Registrierung auf die Benutzer-/Benutzernamen-Seite um (nicht einloggen) – user2476295

0

Wenn Sie möchten, können Sie die folgende Datei /usr/local/lib/python2.7/dist-packages/registration/backends/simple/urls.py ändern, den Pfad zu ändern, zum Beispiel :

Vor der Modifizierung:

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

Nach Modifizierung:

success_url = getattr (Einstellungen, 'SIMPLE_BACKEND_REDIRECT_URL', '/ upload/neu),

Grüße.

Diego

Verwandte Themen