В статье я написал, как делать расширенную модель пользователя:
dunmaksim.blogspot.ru/2015/05/django-18.html
Для решения Вашей задачи нужно:
- описать базовую модель User с полем role или полями вида is_user, is_vendor и т.п.
- унаследовать от неё классы Vendor и PlainUser
В виде делаем ещё проще (показано для ClassBasedView, так же требуется обязательная авторизация, но Вы можете допилить для себя):
from os import path
from django.contrib.auth.decorators import login_required
from django.core.context_processors import csrf
from django.shortcuts import render_to_response
from django.template import RequestContext
from django.views.generic import View
class Login(View):
def get(self, request):
c = {}
c.update(csrf(request))
RequestContext(request, c)
return render_to_response(
path.join('login', 'index.html'),
RequestContext(request, c)
)
class LoginRequiredMixin(object):
@classmethod
def as_view(cls, **initkwargs):
view = super(LoginRequiredMixin, cls).as_view(**initkwargs)
return login_required(view)
class Desktop(LoginRequiredMixin, View):
def get(self, request):
c = {}
c.update(csrf(request))
user = request.user
if user.is_admin:
return render_to_response(
path.join('admin', 'index.html'),
RequestContext(request, c)
)
if user.is_vendor:
return render_to_response(
path.join('vendor', 'index.html'),
RequestContext(request, c)
)
return render_to_response(
path.join('desktop', 'index.html'),
RequestContext(request, c)
)