Как заставить Django LoginRequiredMixin работать? - PullRequest
1 голос
/ 05 марта 2020

Я работаю с Django 3 и хотел бы ограничить свои просмотры только для зарегистрированных пользователей. Поэтому я решил реализовать метод LoginRequiredMixin для Djangos, чтобы контролировать доступ ко всему моему представлению. Но это не работает, на мой взгляд.

class UsersView(LoginRequiredMixin, View):
    def user_list(request):
        users = adg_users.objects.all()
        return render(request, 'care/user/users.html', {'users': users})

Вид все еще открыт, хотя я не вошел в систему. В чем здесь может быть проблема? Что мне нужно сделать, чтобы это работало?

Кроме того, вот urls.py, чтобы увидеть, как будет называться представление:

urlpatterns = [
    path('users/', UsersView.user_list, name='users'),
    path('login/', view.adg_login, name='login'),
    path('logout/', view.adg_logout, name='logout'),
]

1 Ответ

0 голосов
/ 05 марта 2020

Для представлений на основе классов вы можете использовать декораторы

views.py

from django.utils.decorators import method_decorator
from django.contrib.auth.decorators import login_required
from django.views.generic import ListView

@method_decorator(login_required(login_url='/signin'), name='dispatch')
class UsersView(ListView):
    model = adgusers
    template_name = 'care/user/users.html'
    queryset = adgusers.objects.all()
    context_object_name = 'users'  

urls.py

urlpatterns = [
    path('users/', UsersView.as_view(), name='users'),
    path('login/', view.adg_login, name='login'),
    path('logout/', view.adg_logout, name='logout'),
]

Я думаю, adgusers - это название вашей модели

...