私はdjango allauthで複数フォームのサインアップを作成しようとしています。 (私はもともとdjango wizardを試しましたが、ユーザが記入した以前のフォームデータに応じてサインアップが必ずしも線形パスであるとは限りません)。 マルチページサインアップでdjango allauthを動作させるにはどうすればよいですか?Django allauth、複数のフォームに登録
私が最初にユーザーを作成して、フォームの一連のビューを使用していることを考えて、それらをログイン:
ログインしてから使用するビューで終わる必要と似た一連のビューが続い@require_http_methods(['GET', 'HEAD', 'POST'])
def profile_view(request, price_id):
form = ProfileForm()
if request.method == 'POST':
form = ProfileForm(request.POST)
if form.is_valid():
form.save()
user = authenticate(request, username=form.cleaned_data['email'],
password=form.cleaned_data['password1'])
login(request, user)
return redirect('users:supply_address')
return render(request, 'pages/signup.html', {'form': form})
complete_signup
django-allauthのメソッド。
@login_required
@require_http_methods(['GET', 'HEAD', 'POST'])
def direct_debit_view(request):
form = DirectDebitForm()
if request.method == 'POST':
form = DirectDebitForm(data=request.POST)
if form.is_valid():
request.session.update(form.cleaned_data)
complete_signup(request, user, settings.ACCOUNT_EMAIL_VERIFICATION,settings.LOGIN_REDIRECT_URL)
return redirect(settings.LOGIN_REDIRECT_URL)
return render(request, 'pages/signup_postcode.html', {'form': form})
django-allauthが最初のサインアップビューを参照するためのログインに使用されるURLをオーバーライドします。しかし、これが最善のアプローチであるかどうかは分かりません。
url(r'^account/signup/$', views.profile_view, name='profile'),
別のアプローチが必要です。最初のフォームでは、すでにログインできる有効なユーザーが作成されています。したがって、サインアップはすべての目的と目的で実行されます。残りはプロフィールを完成させています。これは問題なく、ほとんどのサインアップがどのように機能するのですか?しかし、すべてが完了する前にユーザーアカウントを作成したくない場合は、セッションを使用する必要があります。最終的なフォームは、フィールドの和集合を持つ必要があり、セッションの内容によって部分的に設定されます。 – Melvyn
私はセッションルートをダウンし始めましたが、jsonエンコーディングでサポートされていないタイプではそれが難しくなりました。私は最初に作成されたユーザーアカウントでOKです。その後、完全な状況ではありませんが、さらにデータを追加すると、すべての登録プロセスが完了する前に電子メールをユーザーに送信したくありません。終了しました。ユーザーがサインアップを完了せずにデータを完成しないと、不完全な詳細を持つユーザーアカウントが表示されます。 – Yunti
私はまったく同じボートに入っていますが、全く異なるプロファイルモデルを持つ2つのユーザータイプがあります。私は、 "次へ"の使用を通じて、方法を参照してください。 request.POSTまたはrequest.GETで次に指定すると、リダイレクトURLを上書きできます。フォームフィールドとして渡すことは、私が今取っている道です。誰もチャイムインしない場合、私はそれがすべて働いているときにいくつかのコードを投稿します。 – Melvyn