def loginUser(request): if request.method != 'POST': return redirect('/') attempt = User.objects.validateUser(request.POST) if attempt['status'] == True: request.session['user_id'] = attempt['user'].id return redirect('/books') else: messages.add_message(request, messages.ERROR, attempt['message'], extra_tags="login") return redirect('/') KeyError en /login u'message' Método de solicitud: URL de solicitud POST: http://127.0.0.1:8000/login Versión de Django: 1.11 Tipo de excepción: KeyError Valor de excepción:
tu'mensaje'
Dice que el attempt diccionario no tiene el message clave. Aquí tienes el diccionario:
attempt = User.objects.validateUser(request.POST) En este punto, inspeccione el valor del attempt (imprimir en la consola o afirmar Falso y negociar de forma interactiva en el navegador). Si no tiene el valor para el message clave, puede proporcionarlo aquí (método validar usuario) o, deje que sea opcional, y cambie la forma en que accede al valor en:
messages.add_message(request, messages.ERROR, attempt.get('message', 'default_msg'), extra_tags="login")Tenga en cuenta que los cambios son de:
attempt.['message']para
attempt.get('message', 'default_msg')Puedes usar estas dos formas.
# either try: message = attempt['message'] except KeyError: message = 'default message or your own message' # or message = attempt.get('message', 'default message you need to set it yourself') # after that just use the message variable messages.add_message(request, messages.ERROR, message, extra_tags="login")