Как я могу аутентифицировать вошедшего в систему пользователя в общих взглядах Django? - PullRequest
0 голосов
/ 12 сентября 2018

Здравствуйте, сообщество Stack Overflow, я создал функции входа в систему и выхода из нее в django views.py, следовательно, я успешно реализовал также методы входа и выхода из системы, но я сбиваю с толку информацию о том, как я могу передать данные этого зарегистрированного пользователя в мои данные.представления на основе классов в views.py, потому что я хочу предоставить доступ к представлениям на основе классов только в том случае, если произошла авторизация пользователя

views.py

def admin_login(request):
    context = {}
    if request.method == 'POST':
        username = request.POST['username']
        password = request.POST['password']
        user = authenticate(request, username=username, password=password)
        if user:
            login(request, user)
            context['user'] = request.user
            return redirect('profile')
        else:
            context['error'] = 'Provide Valid Credentials'
            return render(request, "secret_template.html", context)
    else:
        return render(request, "secret_template.html", context)


def admin_logout(request):
        logout(request)
        return redirect('secretview')

Я хочу аутентифицироваться в представлении ниже, только если пользовательвошли в систему

class index(TemplateView):
    template_name = 'secret_template.html'

Ответы [ 2 ]

0 голосов
/ 12 сентября 2018

Следуя документации Django, вы найдете несколько общих примеров, соответствующих вашему запросу: Для представлений на основе функций вы можете просто использовать декоратор login_required .

from django.contrib.auth.decorators import login_required

@login_required
def my_view(request):
    return Something

Для представлений на основе классов у вас есть пример с method_decorator

from django.contrib.auth.decorators import login_required
from django.utils.decorators import method_decorator

@method_decorator(login_required, name='dispatch')
class ProtectedView(TemplateView):
template_name = 'secret.html'

редактирование: Я не могу комментировать, поэтому я добавляю это здесь: Вы можете обрабатывать пользовательский экземпляр из request.user внутри ваших методов views.

0 голосов
/ 12 сентября 2018

Используйте LoginRequiredMixin по вашему мнению.

from django.contrib.auth.mixins import LoginRequiredMixin

class index(LoginRequiredMixin, TemplateView):
    login_url = reverse_lazy('admin_login') # or whatever
    template_name = 'aapp/index.html'
...