8

Django-登録には、forms.pyファイルにいくつかのフォームクラスがあります。1つは「クラスRegistrationFormTermsOfService(RegistrationForm)」です。

RegistrationFormの代わりに登録フローでこのフォームを有効にするには、残りのDjango登録コードで何を変更しますか?

4

5 に答える 5

5

urls.py次のようにしてフォームクラスをオーバーライドするだけです。

from registration.forms import RegistrationFormTermsOfService

(r'^accounts/register/$', 'registration.views.register', {'form_class' : RegistrationFormTermsOfService}),
于 2011-06-20T18:42:09.637 に答える
5

ユーザー名 == 電子メール アドレスを設定し、登録時にユーザーに電子メール アドレスのみを求めるカスタム フォームとバックエンドを使用した実用的な例を次に示します。で、例えばmy_registration.py

from django.conf import settings
from django.contrib.sites.models import RequestSite
from django.contrib.sites.models import Site

from registration import signals
from registration.forms import RegistrationForm
from registration.models import RegistrationProfile
from registration.backends.default import DefaultBackend

class EmailRegistrationForm(RegistrationForm):
    def __init__(self, *args, **kwargs):
        super(EmailRegistrationForm,self).__init__(*args, **kwargs)
        del self.fields['username']

    def clean(self):
        cleaned_data = super(EmailRegistrationForm,self).clean()
        if 'email' in self.cleaned_data:
            cleaned_data['username'] = self.cleaned_data['username'] = self.cleaned_data['email']
        return cleaned_data


class EmailBackend(DefaultBackend):
    def get_form_class(self, request):
        return EmailRegistrationForm

my_registration_urls.py

from django.conf.urls.defaults import *
from django.views.generic.simple import direct_to_template

from registration.views import activate
from registration.views import register

urlpatterns = patterns('',
                   url(r'^activate/complete/$',
                       direct_to_template,
                       { 'template': 'registration/activation_complete.html' },
                       name='registration_activation_complete'),
                   # Activation keys get matched by \w+ instead of the more specific
                   # [a-fA-F0-9]{40} because a bad activation key should still get to the view;
                   # that way it can return a sensible "invalid key" message instead of a
                   # confusing 404.
                   url(r'^activate/(?P<activation_key>\w+)/$',
                       activate,
                       { 'backend': 'my_registration.EmailBackend' },
                       name='registration_activate'),
                   url(r'^register/$',
                       register,
                       { 'backend': 'my_registration.EmailBackend' },
                       name='registration_register'),
                   url(r'^register/complete/$',
                       direct_to_template,
                       { 'template': 'registration/registration_complete.html' },
                       name='registration_complete'),
                   url(r'^register/closed/$',
                       direct_to_template,
                       { 'template': 'registration/registration_closed.html' },
                       name='registration_disallowed'),
                   (r'', include('registration.auth_urls')),
                   )

次に、 coreurls.pyに以下を含めるようにしてください。

url(r'^accounts/', include('my_registration_urls')),
于 2011-06-20T17:55:54.510 に答える
1

プロジェクトのどこかに新しい登録フォームを書く必要があります。新しいフィールドを拡張するだけの場合は、既存の認証フォームを継承できます。次に、フォームを処理する新しいバックエンドを作成します。最後に、独自の URL と auth_urls を記述し、ビューに渡される変数を変更して、ビューでバックエンドと認証フォームを切り替えるために URL を再定義する必要があります。

ソースを壊して開いて、物事がどのように機能しているかを確認すると便利です。一貫性を保つために、元の django-registration コードに基づいて構造を作成しています。

于 2011-06-20T17:27:00.263 に答える