2013-05-07 37 views
0

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

我想是这样的:

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,}) 
+0

供参考,http://stackoverflow.com/questions/6069070/how-to-use-permission-required-decorators-on-django-class-based-views。 – alecxe 2013-05-07 04:01:05

回答

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问题很好的信息。

希望它能帮助!

+0

是的。我也在使用'method_decorator'。 – 2013-05-07 06:40:23

+0

感谢您的回答:) – 2013-05-07 07:03:54

0

您必须分配需要全班登录。

@login_required 
class AddCompanyInfoHandler(View): 
    ... 

同时也要注意压痕,(参照类的功能)

如果你正在使用裸函数的观点,而不是类,装饰是这样的

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

感谢您的回答:) – 2013-05-07 07:04:17