2011-06-20 5 views
6

Django-registrationには、forms.pyファイルにいくつかのフォームクラスがあります。一つは、「クラスRegistrationFormTermsOfService(RegistrationForm)..ですDjango-Registrationで別のフォームを使用する方法

私はRegistrationFormするのではなく、流れの私の登録でこのフォームを有効にするには、Djangoの登録コードの残りの部分で何が変わるのか?

答えて

5

あなたは単にあなたのurls.pyに行くと行って、フォームクラスをオーバーライドすることができます次のようなもの:

urls.pyで

from registration.forms import RegistrationFormTermsOfService 
from registration.backends.default.views import RegistrationView 

urlpatterns = patterns('', 
    url(r'^accounts/register/$', RegistrationView.as_view(form_class=RegistrationFormTermsOfService), name='registration_register'), 
    # your other URLconf stuff follows ... 
) 

が、その後registration_form.htmlテンプレートを更新し、tosフィールドを追加ジャンゴ1.5とDjango登録の最新バージョンに適合するように受け入れられて答えを更新

+0

驚くほど簡単に聞こえる...新しいフォームがregフォームのリロード時に表示されるはずですか? – Brenden

+0

あなたはそれを試してみませんか:-)(ヒント:はい、そうすべきです) –

+0

これを私のメインのurls.pyと登録行の前に入れています。しかし、私はエラーレジスタを取得しています()は、少なくとも2つの非キーワード引数(与えられた1)を受け取ります – Brenden

1

あなたは新規登録を書く必要があります新しいフィールドを展開している場合は、既存の認証フォームを継承することができます。フォームを処理するために新しいバックエンドを作成したい場合は、最後に独自のURLを記述する必要があります。ビューに渡される変数を変更して、ビュー内のバックエンドと認証フォームを切り替えるためのurlをauth_urlsおよび再定義してください。

kソースを開いて、どのように動作しているかを確認します。私は、物事を一貫性を保つためにオリジナルのジャンゴ登録コードから私の構造を外しています。

+0

このフォームは既にforms.pyファイルに存在します。私はまだ新しい登録用紙を書く必要がありますか?私は文字通り、標準のRegクラスの代わりに(質問で参照される)他のクラスを使用したいと思います。それをアクティブなフォームにする方法は分かりません。 – Brenden

5

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

my_registration_urls.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 

:あなたのコアで次に

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

urls.py、あなたには、確認してください。

url(r'^accounts/', include('my_registration_urls')), 
+0

my_registration_urls.pyの 'バックエンド'の設定に注意してください... – Darb

13

例:

<p> 
<label for="id_tos">I accept the terms of service</label> 
{% if form.tos.errors %} 
    <p class="errors">{{ form.tos.errors.as_text }}</p> 
{% endif %} 
{{ form.tos }} 
</p> 
+0

if電子メールのアクティベーションを必要とせず、ユーザーがすぐに起動する 'シンプルな 'ワークフローを使用したい場合は、' from.registration.backends.simple.views import RegistrationView'の代わりにこのビューをインポートします。 – static

関連する問題