django - 将身份验证装饰器添加到基于类的视图中
问题描述
嗨,我试图将身份验证装饰器应用于我的基于类的视图,但它们似乎不起作用,因为当我查看模板时,我没有被重定向到默认帐户/登录/下一个?网址
from .forms import TodoForm
from .models import Todo
from django.template import loader
from django.contrib.auth.decorators import login_required
from django.utils.decorators import method_decorator
from django.views.generic import (
CreateView,
ListView,
DetailView,
UpdateView,
DeleteView
)
from django.urls import reverse
from django.shortcuts import render, get_object_or_404
# Create your views here.
@method_decorator(login_required, name='dispatch')
class TodoListView(ListView):
template_name = 'ToDo/todo_list.html'
queryset = Todo.objects.all()
@method_decorator(login_required, name='dispatch')
class TodoDetailView(DeleteView):
template_name = 'ToDo/todo_detail.html'
queryset = Todo.objects.all()
def get_object(self):
id_ = self.kwargs.get("id")
return get_object_or_404(Todo, id=id_)
解决方案
您不能将 django auth 装饰器用于 CBV(基于类的视图)。您可以使用 mixins 来实现这一点。例如,您可以将 LoginRequiredMixin 用于 CBV,而不是 login_required 装饰器,
from django.contrib.auth.mixins import LoginRequiredMixin
class MyView(LoginRequiredMixin, View):
login_url = '/login/'
redirect_field_name = 'redirect_to'
看看文档 https://docs.djangoproject.com/en/3.0/topics/auth/default/#the-loginrequired-mixin
推荐阅读
- ansible - 针对无效用户的 Ansible Cisco 配置合规性检查
- javascript - 在nodejs中维护静态常量值列表的最佳方法
- swift - 过滤数组或设置然后转换为数组的性能更高?(迅速)
- java - 将spring应用程序连接到Mysql数据库时出现问题
- android - 我应该如何在 Flutter 中调整我的小部件树?
- laravel - Laravel - 选择关系列
- python - Web 应用程序:Flask - html - wtforms:带有两个提交按钮的表单
- reactjs - EsLint 误解了 no-unused-vars 中的 import 语句
- amazon-web-services - AWS DMS - 从多个表中选择列
- asp.net-core - JWT 身份验证检查和验证