0

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

我想要这样的东西:

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,})
4

2 回答 2

2

给我带来了一些光明。

简而言之,您必须装饰类的调度方法,并且该类的每个实例都将受到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)

注意:这个问题也有很好的信息。

希望能帮助到你!

于 2013-05-07T04:22:06.760 回答
0

您必须将所需的登录名分配给整个班级。

@login_required
class AddCompanyInfoHandler(View):
    ...

并注意缩进,(参考你类中的函数)

如果您将裸函数用于视图而不是类,则装饰器如下所示

@login_required
def home(request):
    if request.method=='GET':
        ...
    else:
        ...
于 2013-05-07T04:03:38.970 回答