所以我使用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,但它仍然將我重定向到用戶/ 插入用戶名頁面並出現錯誤。如何在註冊後將用戶重定向到其他應用程序所在的上傳/新頁面?
我到底在哪兒放了MyRegistrationView類?它是繼續在backend.simple文件夾中的views.py還是註冊文件夾中的views.py? – user2476295
正如我上面所說的,不要更改註冊模塊中的代碼。如果升級到下一個版本的django註冊,它會變得非常困難。您可以將該類放入您自己的應用程序的views.py中。如果您願意,可以將它包含在'urls.py'中,因爲它只有三行。 – Alasdair
所以我試了這個,我把這兩個代碼塊放在backends.simple.urls.py中因爲我的項目文件夾中的主要urls.py文件調用了simple.urls,就像你從上面看到的那樣。它仍然不起作用,並在註冊後立即重定向到用戶/用戶名頁面(不是登錄) – user2476295