добавление аутентификационных декораторов в представления на основе классов - PullRequest
0 голосов
/ 11 февраля 2020

Привет, я пытаюсь применить аутентификаторы-декораторы к моим представлениям на основе классов, но они, похоже, не работают, так как при просмотре шаблона я не перенаправляюсь на учетные записи по умолчанию / login / next? URL

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_)


1 Ответ

0 голосов
/ 11 февраля 2020

Вы не можете использовать django auth-декораторы для CBV (Class Based Views). Для этого вы можете использовать миксины. Например, вместо декоратора login_required вы можете использовать LoginRequiredMixin для CBV, как,

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

...