django中@login_required和@method_decorator(login_required)之间的区别是什么?

use*_*451 3 python django

我是django的新手,我很困惑@login_required@method_decorator(login_required)Django 之间有什么区别 ,我们应该使用哪一个.提前致谢.

Ala*_*air 5

使用@login_required基于功能的视图:

@login_required    
def my_view(request):
    return HttpResponse('hello')
Run Code Online (Sandbox Code Playgroud)

您可以使用@method_decorator(login_required)基于类的视图,

@method_decorator(login_required, name='dispatch')
class MyView(TemplateView):
    template_name = 'hello.html'

    @method_decorator(login_required)
    def dispatch(self, *args, **kwargs):
        return super(MyView, self).dispatch(*args, **kwargs)
Run Code Online (Sandbox Code Playgroud)

但是使用它可能更简单LoginRequiredMixin:

from django.contrib.auth.mixins import LoginRequiredMixin

class MyView(LoginRequiredMixin, TemplateView):
    template_name = 'hello.html'
Run Code Online (Sandbox Code Playgroud)