6

@login_required デコレータを持つビューがあり、ページをプルアップすると、ログインしていない場合、適切な ?next=/url/you/tried/to/see でログインフォームに送信されます

私の問題は、次の値を後続のフォームとアクティベーション電子メールに渡す方法です。これにより、ユーザーがアクティベーション プロセスを完了すると、最初にアクセスしようとしたビューにリダイレクトされます。

私の Python'foo と Django'foo は弱いので、5 歳児が従えるような答えを残しておいてください ;)

ありがとうございます。

4

3 に答える 3

2

ビルトインビューはデフォルトでこれを処理します。<input type="hidden" name="next" value="{{ next }}" />ログインページのテンプレートに次のコードがあることを確認してください。

于 2010-07-04T20:08:10.237 に答える
0

簡単です。URL を保存して、2 つのメソッドをオーバーライドする独自のバックエンドを作成するだけです。

アカウント/models.py

class UserNext(models.Model):
    user = models.OneToOneField(User)
    url = models.CharField(max_length=255, blank=True, null=True)

accounts/nextbackend.py:

from registration.backends.default import DefaultBackend
from django.core.urlresolvers import resolve
from accounts.models import UserNext

class NextBackend(DefaultBackend):

    def register(self, request, **kwargs):
            username, email, password = kwargs['username'], kwargs['email'], kwargs['password1']
            if Site._meta.installed:
                site = Site.objects.get_current()
            else:
                site = RequestSite(request)
            new_user = RegistrationProfile.objects.create_inactive_user(username, email,
                                                                        password, site)
            signals.user_registered.send(sender=self.__class__,
                                         user=new_user,
                                         request=request)

            next, created = UserNext.objects.get_or_create(user=new_user)
            next.url = request.GET.get('next',None) # or POST, don't know how you want to pass it
            next.save()
            return new_user

    def post_activation_redirect(self, request, user):
        next = UserNext.objects.get(user=user)
        view, args, kwargs = resolve(next.url)
        return (view, args, kwargs)

accounts/view.py で this^ バックエンドを登録バックエンドとして使用します。

def custom_register(request):
            return register(request, backend='accounts.nextbackend.NextBackend',)

urls.py:

url(r'^accounts/register/$', 'accounts.views.custom_register', name='registration_register'),

その場で書かれた、それをテストしなかった、動作するはずです。明らかに、いくつかのインポートを追加する必要があります。

于 2010-07-05T10:26:59.823 に答える