Избегать "DoesNotExist в /" - PullRequest
0 голосов
/ 26 января 2019

Я сделал просмотр журнала, который работает отлично.Проблема в том, что я хочу избежать стандартного шаблона сообщения Django:

DoesNotExist at /
 Usuario matching query does not exist.
  Request Method:   POST
  Request URL:  http://localhost:8000/
  Django Version:   2.1.5
  Exception Type:   DoesNotExist
  Exception Value: Usuario matching query does not exist.

Вместо того, чтобы пытаться отправить собственное сообщение об ошибке входа в систему, мой код выглядит так:

def login(request):
    if request.method == "POST":
        print('Form is post.')
        form = LoginForm(request.POST)
        if form.is_valid():
            print('Form is valid.')
            loginUser = form.cleaned_data.get('nombreUsuario')
            loginPass = form.cleaned_data.get('password')
            loginEmp = form.cleaned_data.get('nombreEmpresa')
            encontroUsuario = Usuario.objects.get(nombre=loginUser, password=loginPass)
            encontroEmpresa = Empresa.objects.get(nombre=loginEmp)
            if encontroUsuario and encontroEmpresa:
                return HttpResponse('Logueado con éxito.')
            if encontroUsuario.DoesNotExist or encontroEmpresa.DoesNotExist:
                return render(request, "loginError.html", {"form": form})
    else:
        form = LoginForm
        return render(request, "login.html", {"form": form})

1 Ответ

0 голосов
/ 26 января 2019

Вы можете поймать исключения с помощью try - except:

from django.core.exceptions import <b>ObjectDoesNotExist</b>

def login(request):
    if request.method == "POST":
        print('Form is post.')
        form = LoginForm(request.POST)
        if form.is_valid():
            print('Form is valid.')
            loginUser = form.cleaned_data.get('nombreUsuario')
            loginPass = form.cleaned_data.get('password')
            loginEmp = form.cleaned_data.get('nombreEmpresa')
            <b>try:</b>
                encontroUsuario = Usuario.objects.get(nombre=loginUser, password=loginPass)
                encontroEmpresa = Empresa.objects.get(nombre=loginEmp)
            <b>except ObjectDoesNotExist:</b>
                return render(request, "loginError.html", {"form": form})
            return HttpResponse('Logueado con exito.')
    else:
        form = LoginForm
        return render(request, "login.html", {"form": form})

Возможно, было бы даже лучше try - except оба objects.get(..) с отдельно с except ModelDoesNotExist.

Обратите внимание, что вы должны не хранить необработанные пароли, вы должны хеш эти.На самом деле в пользовательской модели Django есть инструменты для этого.Подробнее о документации по аутентификации [Django-doc] .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...