Почему это не работает?Что нужно сделать, чтобы пользовательский логин работал? - PullRequest
0 голосов
/ 29 ноября 2018

Пробовал много способов, но все еще не работает.Как заставить это работать?

class LoginView(View):

    templates = "#/signin.html"
    context = ModelUser.objects.all()

    def get(self, *agrs, **kwargs):
        return render(self.request, self.templates, {'context' : self.context})

    def post(self, *args, **kwargs):
        login = ModelUser()
        if self.request.method == 'POST':
            if self.request.POST.get('username') and self.request.POST.get('password'):
                login.username = self.request.POST.get('username')
                login.password = self.request.POST.get('password')

            for verify in self.context:
                if self.context.filter(username=self.request.POST.get('username')).exist() and self.context.filter(password=self.request.POST.get('password')).exist():
                    return HttpResponse('You are logged in')
                else:
                    return HttpResponse('Error password or username')

1 Ответ

0 голосов
/ 29 ноября 2018

Вы можете попробовать это следующим образом:

from django.contrib.auth import authenticate, login


class LoginView(View):
    templates = "#/signin.html"

    def get(self, *agrs, **kwargs):
        return render(self.request, self.templates)

    def post(self, *args, **kwargs):
        if self.request.method == 'POST':
            if self.request.POST.get('username') and self.request.POST.get('password'):
                username = self.request.POST.get('username')
                password = self.request.POST.get('password')

                user = authenticate(request, username=username, password=password)  # Its related to Authentication Backend
                # In authentication backend, it checks if the user is valid or not
                if user:
                    login(request, user)  # user login to system
                    return HttpResponse('You are logged in')
                else:
                    return HttpResponse('Error password or username')

Для аутентификации django использует модель-бэкэнд .Он внутренне проверяет, действительны ли имя пользователя и пароль, или, если он действителен, возвращает объект User.Затем вызов функции login позволяет объекту User войти в систему.После этого вы можете проверить, вошел ли пользователь в систему или нет по request.user.is_authenticated (используйте его в других представлениях).

...