8

Sitem için bir kullanıcı kayıt sayfasını uygulamak için django-kayıt uygulamasını kullanıyorum. Kullanıcıların kayıt olduktan hemen sonra giriş yapabilmelerini sağlayan Django'nun backends.simple görünümlerini kullandım. Sorum, onları, projeyle aynı dizinde bulunan diğer uygulamamın sayfasına nasıl yönlendiririm.Kullanıcılar, django kaydına kayıt olduktan sonra belirli bir URL'ye nasıl yönlendirilir?

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 ben proje dizin mysite sahip diğer app adıdır: Burada

gibi benim ana urls.py görüntüsü. backends.simple.views

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

Ve burada:

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(),(), {}) 

Sadece dönüşüne get_success_url fonksiyonunu değiştirerek denedik

Bu

backends.simple.urls neye benzediği İstediğim url/upload/new olup hala beni kullanıcılara yönlendirdi/ kullanıcı adı sayfasını ekleyip hata verdi. Kullanıcıyı, diğer uygulamanın kayıt olduktan sonra bulunduğu yükleme/yeni sayfaya nasıl yönlendiririm?

cevap

17

registration modülündeki kodu değiştirmeyin. Bunun yerine, RegistrationView alt sınıfını ve istediğiniz URL'yi döndürmek için get_success_url yöntemini geçersiz kılın.

from registration.backends.simple.views import RegistrationView 

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

Sonra yerine basit arka uç URL'ler dahil olmak üzere, urls.py ana daki özel kayıt manzarası vardır. İsterseniz

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 sınıfını tam olarak nereye koydum? Backend.simple klasöründeki veya kayıt klasörünün içindeki views.py dosyasına gider mi? – user2476295

+1

Yukarıda belirttiğim gibi, kayıt modülündeki kodu değiştirmeyin. Django-kaydının bir sonraki versiyonuna yükseltmek çok daha zor olurdu. Sınıfı kendi uygulamanızın view.py sürümünden birine yerleştirebilirsiniz. İsterseniz, sadece üç satır olduğundan, 'urls.py' içine ekleyebilirsiniz. – Alasdair

+0

Bu yüzden denedim ben her iki kod blokları backends.simple.urls.py Bu yana, benim proje klasöründe ana urls.py dosyası, yukarıda görebildiğiniz gibi simple.urls için bir çağrı yapar.Hala çalışmıyor ve kayıt olduktan hemen sonra kullanıcı/kullanıcı adı sayfasına yönlendiriyor (oturum açma değil) – user2476295

0

, örneğin, yolunu değiştirerek, aşağıdaki dosyayı /usr/local/lib/python2.7/dist-packages/registration/backends/simple/urls.py değiştirebilir :

modifiye önce:

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

değiştirdikten sonra:

success_url = getattr (ayarlar, 'SIMPLE_BACKEND_REDIRECT_URL', '/ yükleme/yeni'),

Selamlar.

Diego