7

私はDjangoにかなり慣れていません(1.3以降)。アプリの構築では、組み込みのクラスの組み合わせを使用し、コンテキストに追加する必要がある場所でそれらをサブクラス化して、最初から新しいクラスベースのジェネリックビューを使用しました。

今私の問題は、自分のビューに戻って、ログインしているユーザーだけがアクセスできるようにする必要があるということです。私が見つけたすべてのドキュメントは、クラスベースではなく、古い機能的なジェネリックビューでこれを行う方法を示しています。

クラスの例を次に示します。

class ListDetailView(DetailView):
    context_object_name = "list"

    def get_queryset(self):
        list = get_object_or_404(List, id__iexact=self.kwargs['pk'])
        return List.objects.all()

    def get_context_data(self, **kwargs):
        context = super(ListDetailView, self).get_context_data(**kwargs)
        context['subscriber_list'] = Subscriber.objects.filter(lists=self.kwargs['pk'])
        return context

djangoの新しいクラスベースのビューに認証を追加するにはどうすればよいですか?

4

3 に答える 3

19

ビュークラスを派生させる認証ミックスインのオプションもあります。したがって、brack3t.com のこの mixin を使用します。

class LoginRequiredMixin(object):

    @method_decorator(login_required)
    def dispatch(self, *args, **kwargs):
        return super(LoginRequiredMixin, self).dispatch(*args, **kwargs)

次に、次のような新しい「認証が必要な」ビューを作成できます。

from django.views.generic import DetailView

class MyDetailView(LoginRequiredMixin, DetailView):
    ....

他の追加は必要ありません。自分を繰り返さないのと同じように感じます。

于 2012-04-24T19:41:01.173 に答える
6

ドキュメントには、クラスベースのビューの装飾login_requiredに関するセクションがあります-古いものなどを使用したいだけの場合は、それが道です。

于 2011-07-08T19:54:13.907 に答える
4

ListViewを装飾する方法を説明しています:

class MyListView(ListView):
    decorator = lambda x: x

    @method_decorator(decorator)
    def dispatch(self, request, *args, **kwargs):
       return super(MyListView, self).dispatch(request, *args, **kwargs)

このようなクラスベースのビューを作成した後、関数ベースのデコレータをURLに直接挿入できます。

url(r'^myurl/$', MyListView.as_view(decorator=login_required))
于 2012-03-29T21:06:44.197 に答える