我想創建一個多表單註冊與django allauth。 (我最初嘗試django嚮導,但選擇退出,因爲註冊並不一定是線性路徑,這取決於用戶填寫的早期表單數據)。 讓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})
後面是一系列的類似的視圖,其需要登錄,然後與使用的視圖結束來自django-allauth的方法complete_signup
。
@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編碼中不支持的類型中遇到了更多困難。我可以首先創建用戶帳戶,然後再向其中添加更多數據(雖然不是完美的情況),但我不希望在註冊過程完成之前向用戶發送電子郵件完了。如果用戶沒有完成註冊並完成數據,那麼我將能夠看到包含不完整詳細信息的用戶帳戶。 – Yunti
我幾乎在同一條船上,除了我有兩個用戶類型完全不同的配置文件模型。我通過使用「下一個」來看到一種方式。如果您在request.POST或request.GET中提供下一個,則可以覆蓋重定向url。將它作爲表單域傳遞是我現在採用的道路。如果沒有人發出邀請,我會在完成所有工作後發佈一些代碼。 – Melvyn