使用自定义登录页面将管理员用户重定向到django 1.5中的管理界面

时间:2013-12-07 10:35:51

标签: python-2.7 django-1.5

当尝试使用管理员凭据登录时,它正在工作并重定向到管理界面,但它没有显示管理界面,它显示管理员登录页面。我应该如何将管理员用户直接重定向到管理界面?

views.py

class LoginView(TemplateView, FormMixin):

"""
Login page
"""
template_name = 'signin.html'
form_class = LoginForm
redirect_field_name = REDIRECT_FIELD_NAME
template_name = 'signin.html'
success_url = '/frontend/'

def form_valid(self, form):
    username = form.cleaned_data['username']
    password = form.cleaned_data['password']

    user = authenticate(username=username, password=password)
    if user is not None:
        if user.is_active and user.is_superuser:
            return HttpResponseRedirect('/admin/')
        elif user.is_active:
            login(self.request, user)
            return HttpResponseRedirect(self.get_success_url())
        else:
            return HttpResponseRedirect(reverse('login'))
    else:
            return HttpResponseRedirect(reverse('login'))

def form_invalid(self):
    return HttpResponseRedirect(reverse('login'))

def get_success_url(self):
    if self.success_url:
        redirect_to = self.success_url
    else:
        redirect_to = self.request.REQUEST.get(self.redirect_field_name, '')

    netloc = urlparse.urlparse(redirect_to)[1]
    if not redirect_to:
        redirect_to = settings.LOGIN_REDIRECT_URL
    elif netloc and netloc != self.request.get_host():
        redirect_to =  settings.LOGIN_REDIRECT_URL

    return redirect_to

def post(self, request, *args, **kwargs):
    form_class = self.get_form_class()
    form = self.get_form(form_class)
    if form.is_valid():
        return self.form_valid(form)
    else:
        return self.form_invalid()

1 个答案:

答案 0 :(得分:1)

根据您的代码理解。

你做错了
if user.is_active and user.is_superuser:
   return HttpResponseRedirect('/admin/')
elif user.is_active:
   login(self.request, user)

当您尝试登录代码时,请始终转到if语句,这就是为什么它重定向到/ admin /但实际上没有进行登录。
您的代码应该像

if user.is_active and user.is_superuser:
   login(self.request, user)         # you must put login here and it will work fine
   return HttpResponseRedirect('/admin/')
elif user.is_active:
   login(self.request, user)