Quando se tenta logar com um usuário que não existe, a lógica proposta não funciona:
form = FormularioUsuario(request.form)
usuario = Usuarios.query.filter_by(nickname=form.nickname.data).first()
senha = check_password_hash(usuario.senha, form.senha.data)
if usuario and senha:
session['usuario_logado'] = usuario.nickname
... (continua)
Veja que, se o usuario não existir, a linha do check_password_hash
não vai funcionar porque não existe usuario.senha
Alterei para fazer o seguinte:
form = FormularioUsuario(request.form)
usuario = Usuarios.query.filter_by(nickname=form.nickname.data).first()
if usuario:
senha = check_password_hash(usuario.senha, form.senha.data)
if senha:
session['usuario_logado'] = usuario.nickname
... (continua)
Espero ter contribuido.