Django-registrationには、forms.pyファイルにいくつかのフォームクラスがあります。一つは、「クラスRegistrationFormTermsOfService(RegistrationForm)..ですDjango-Registrationで別のフォームを使用する方法
私はRegistrationFormするのではなく、流れの私の登録でこのフォームを有効にするには、Djangoの登録コードの残りの部分で何が変わるのか?
Django-registrationには、forms.pyファイルにいくつかのフォームクラスがあります。一つは、「クラスRegistrationFormTermsOfService(RegistrationForm)..ですDjango-Registrationで別のフォームを使用する方法
私はRegistrationFormするのではなく、流れの私の登録でこのフォームを有効にするには、Djangoの登録コードの残りの部分で何が変わるのか?
あなたは単にあなたの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登録の最新バージョンに適合するように受け入れられて答えを更新
あなたは新規登録を書く必要があります新しいフィールドを展開している場合は、既存の認証フォームを継承することができます。フォームを処理するために新しいバックエンドを作成したい場合は、最後に独自のURLを記述する必要があります。ビューに渡される変数を変更して、ビュー内のバックエンドと認証フォームを切り替えるためのurlをauth_urlsおよび再定義してください。
kソースを開いて、どのように動作しているかを確認します。私は、物事を一貫性を保つためにオリジナルのジャンゴ登録コードから私の構造を外しています。
このフォームは既にforms.pyファイルに存在します。私はまだ新しい登録用紙を書く必要がありますか?私は文字通り、標準のRegクラスの代わりに(質問で参照される)他のクラスを使用したいと思います。それをアクティブなフォームにする方法は分かりません。 – Brenden
ここでは、ユーザー名==電子メールアドレスを設定するカスタムフォームとバックエンドを使用した実際的な例を示します。登録時にユーザーに電子メールアドレスの入力を求めます。例えば、 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')),
my_registration_urls.pyの 'バックエンド'の設定に注意してください... – Darb
例:
<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>
if電子メールのアクティベーションを必要とせず、ユーザーがすぐに起動する 'シンプルな 'ワークフローを使用したい場合は、' from.registration.backends.simple.views import RegistrationView'の代わりにこのビューをインポートします。 – static
驚くほど簡単に聞こえる...新しいフォームがregフォームのリロード時に表示されるはずですか? – Brenden
あなたはそれを試してみませんか:-)(ヒント:はい、そうすべきです) –
これを私のメインのurls.pyと登録行の前に入れています。しかし、私はエラーレジスタを取得しています()は、少なくとも2つの非キーワード引数(与えられた1)を受け取ります – Brenden