以前刚开使用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
这样就做好了强制登录了。