我知道我可以使用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,})
答案 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:
...