django检查是否登录,装饰器为class_based视图

时间:2013-05-07 02:15:11

标签: django login decorator

我知道我可以使用request.user.is_authenticated()来检查用户是否已登录,并且我想为我的class_based视图使用装饰器,比如函数视图的装饰器:login_required,我该怎么办? / p>

我想要这样的事情:

class AddCompanyInfoHandler(View):
    model = Company

    @check_login_decorator
       def get(self, request):
        form = EnrollCompanyForm()
        return render(request, 'student/company_form.html', {'form': form,})

    @check_login_decorator
        def post(self, request):
            form = EnrollCompanyForm(request.POST)
            if form.is_valid():
                form_data = form.cleaned_data
                current_user = request.user
                company = Company.objects.create_company(current_user, form_data)
                company.save()

                return HttpResponse("Create Company USer Successfully!")
            else:
                return render(request, 'student/company_form.html', {'form': form,})

2 个答案:

答案 0 :(得分:2)

This我带来了一些亮点。

简而言之,您必须修饰类的调度方法,并且该类的每个实例都将受login_decorator的保护。在你的情况下应该是这样的:

from django.contrib.auth.decorators import login_required
from django.utils.decorators import method_decorator

class AddCompanyInfoHandler(View):

    ...

    @method_decorator(login_required)
    def dispatch(self, *args, **kwargs):
        return super(AddCompanyInfoHandler, self).dispatch(*args, **kwargs)

注意: this问题中也有不错的信息。

希望它有所帮助!

答案 1 :(得分:0)

您必须为整个班级分配所需的登录信息。

@login_required
class AddCompanyInfoHandler(View):
    ...

请注意缩进(参考班级中的功能)

如果你正在使用视图而不是类的裸函数,装饰器就像这样

@login_required
def home(request):
    if request.method=='GET':
        ...
    else:
        ...