inventory/inventory/views/onboarding.py

60 lines
2.6 KiB
Python

from django.utils.translation import gettext_lazy as _
from django.urls import reverse
from django.template.response import TemplateResponse
from django.shortcuts import redirect
from django.views.generic import View
from django import forms
from django.contrib.auth import get_user_model
from django.contrib.auth.forms import AuthenticationForm
from django.conf import settings
class OnboardingForm(forms.Form):
username = forms.CharField(label=_("Username"), max_length=150, required=True)
email = forms.EmailField(label=_("Email"), max_length=254, required=True)
password = forms.CharField(label=_("Password"), max_length=1024, min_length=8, widget=forms.PasswordInput(), required=True)
class OnboardingView(View):
def get(self, request):
User = get_user_model()
if User.objects.all().count() != 0:
# redirect to index
return redirect(reverse('index'))
return TemplateResponse(request, "inventory/onboarding.html", {
"settings": {
"SERVER_URL": settings.SERVER_URL,
"DEBUG": settings.DEBUG,
"ALLOWED_HOSTS": settings.ALLOWED_HOSTS,
"DATABASE_HOST": settings.DATABASES['default']['HOST'],
"DATABASE_NAME": settings.DATABASES['default']['NAME'],
"DATABASE_USER": settings.DATABASES['default']['USER'],
"DATABASE_PASSWORD": settings.DATABASES['default']['PASSWORD'],
"LANGUAGE_CODE": settings.LANGUAGE_CODE,
"TIME_ZONE": settings.TIME_ZONE,
"STATIC_ROOT": settings.STATIC_ROOT,
"MEDIA_ROOT": settings.MEDIA_ROOT,
"PAGE_SIZE": settings.PAGE_SIZE,
},
"form": OnboardingForm()
})
def post(self, request):
# validate we have everything
form = OnboardingForm(request.POST)
if form.is_valid():
# create superuser
User = get_user_model()
User.objects.create_superuser(
form.cleaned_data['username'],
form.cleaned_data['email'],
form.cleaned_data['password']
)
# show success screen
login_form = AuthenticationForm(data={"username": form.cleaned_data['username'] })
return TemplateResponse(request, "inventory/onboarding_success.html", {"form": login_form, "next": reverse('index')})
return TemplateResponse(request, "inventory/onboarding.html", {"settings": settings, "form": form})