用django的自带的装饰器或中间件非常简单的实现强制登录

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/brytlevson/article/details/102498481

以前刚开使用django 的时候做强制登录是在视图函数里面用session存取登录状态来做强制登录的,其次还可以用django 的中间件可以做强制登录,也是比较简单的,今天给大家介绍的是django自带的装饰器做强制登录。

# 1. 写好登录html
def login(request):
    return render(request, 'portal/login.html')
# 2. 在url路由中配置
 path('login/', views.login, name='portal-login'),
# 3. 在views导包
# 函数试图导入
from django.contrib.auth.decorators import login_required
#如果有类试图的话,需要导
from django.utils.decorators import method_decorator
# 然后给每个需向强制登陆的视图上面加上装饰器

# 函数视图案列   
@login_required(redirect_field_name="portal-login")
def belt_and_road(request):
    return render(request, 'portal/belt_and_road.html')
# 类视图案列
@method_decorator(login_required, name='dispatch')
class ResourceListView(ListView):
    context_object_name = 'specimen'
    
    def get_queryset(self):
        self.keyword = self.request.GET.get('keyword', '')
        if len(self.keyword) != 0:
            return Specimen.objects.filter(
                Q(chinesename__contains=self.keyword) | Q(scientificname__contains=self.keyword) | Q(
                    canonicalname__contains=self.keyword) | Q(family__contains=self.keyword) | Q(
                    genus__contains=self.keyword)).order_by("id")
        return Specimen.objects.all()

    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        context['keyword'] = self.keyword
        return context

这样就做好了强制登录了。

猜你喜欢

转载自blog.csdn.net/brytlevson/article/details/102498481