簡體   English   中英

Django 中基於類的視圖上的 login_required 裝飾器

[英]login_required decorator on a class based view in django

我有一個基於工人階級的觀點。 但是在添加@login_required 時出現錯誤:

AttributeError: 'function' 對象沒有屬性 'as_view'

這里的 ResultListView 發生了一些事情:

from django.urls import path
from .views import ResultListView


urlpatterns = [
    path('meetings/', ResultListView.as_view(), name='meetings'),
]

我的意見.py:

@login_required
class ResultListView(ListView):
    template_name = ...

    def get_queryset(self):
        return Result.objects.filter(rider__user=self.request.user)

在我將裝飾器放入之前,一切正常。現在非常困惑,我不明白為什么ResultListView在通過裝飾器發送時應該失去它的屬性。

@login_required裝飾器只裝飾函數,而不裝飾類,您可以使用 mixin,或者裝飾作為.as_view()調用結果的函數。

選項 1:使用LoginRequiredMixin

您可以使用需要放在父類中的ListView之前LoginRequiredMixin [Django-doc]

from django.contrib.auth.mixins import LoginRequiredMixin

class ResultListView(LoginRequiredMixin, ListView):
    template_name = …

    def get_queryset(self):
        return Result.objects.filter(rider__user=self.request.user)

選項 2:修飾.as_view()結果

另一種方法是裝飾.as_view的結果,這確實是一個函數:

from django.urls import path
from .views import ResultListView
from django.contrib.auth.decorators import login_required

urlpatterns = [
    path('meetings/', login_required(ResultListView.as_view()), name='meetings'),
]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM