Miguel Toledano Miguel Toledano - 15 days ago 5
Python Question

How can I make two differents login forms in Django?

How can I log in and redirect to his "Dashboard" and a login form for the admin site and redirect to his "Admin Panel"

I have been looking for and read that it can be done by creating a ModelBackend and found this as a reference but it does not make me clear how to do it.
https://docs.djangoproject.com/en/1.8/topics/auth/customizing/

Thank you very much for your help.!

Answer

As I understand you need two login views. In your app views.py create 2 views, for example:

def loginDashboard(request):
  if request.user.is_authenticated():
    return HttpResponseRedirect('/')
  if request.method == 'POST':
    form = LoginForm(request.POST)
    if form.is_valid():
      username = form.cleaned_data['username']
      password = form.cleaned_data['password']
      account = authenticate(username=username, password=password)
      if account is not None:
        login(request, account)
#here is redirecting to dashboard
          return HttpResponseRedirect('/dashboard/')
      else:
        return render(request, 'profiles/login.html', context)
    else:
      return render(request, 'profiles/login.html', context)
  else:
    form = LoginForm()
    context = {'form':form}
    return render(request, 'profiles/login.html', context)

def loginAdminPanel(request):
  if request.user.is_authenticated():
    return HttpResponseRedirect('/')
  if request.method == 'POST':
    form = LoginForm(request.POST)
    if form.is_valid():
      username = form.cleaned_data['username']
      password = form.cleaned_data['password']
      account = authenticate(username=username, password=password)
      if account is not None:
        login(request, account)
#here is redirecting to admin panel
          return HttpResponseRedirect('/adminpanel/')
      else:
        return render(request, 'profiles/login.html', context)
    else:
      return render(request, 'profiles/login.html', context)
  else:
    form = LoginForm()
    context = {'form':form}
    return render(request, 'profiles/login.html', context)

And your urls.py:

url(r'^login-dash/$', views.loginDashboard),
url(r'^login-admin/$', views.loginAdminPanel),

In this case you have two login pages (example.com/login-dash and example.com/login-admin)

your forms.py:

class LoginForm(forms.Form):
username = forms.CharField(label=(u'Username'))
password = forms.CharField(label=(u'Pasword'), widget=forms.PasswordInput(render_value=False))

Hope it helps you.

Comments