Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Erro ao entrar na opção Editar de um jogo qualquer antes de realizar login

Estou enfrentando um erro aqui, mas antes de postar a dúvida decidi usar o arquivo com o projeto pronto do final da aula 4 e notei que lá ocorre o mesmo erro.

Como reproduzir o erro: 1. Criar projeto no pyCharm 2. Descompactar aula4.zip no diretório do projeto 3. Esperar o pyCharm atualizar o projeto 4. Executar jogoteca.py 5. Clicar no link apresentado no console para acessar a página inicial 6. Clicar no link Editar de qualquer jogo 7. Obter-se-á uma página de reporte de erro, cujo stack é apresentado no console também.

Segue o conteúdo do console para análise:

C:\Anaconda3\python.exe C:/Dev/Alura/Python3/Aula4/jogoteca.py
 * Restarting with stat
 * Debugger is active!
 * Debugger PIN: 107-791-923
 * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
127.0.0.1 - - [20/Jan/2018 10:18:11] "GET / HTTP/1.1" 200 -
127.0.0.1 - - [20/Jan/2018 10:18:11] "GET /favicon.ico HTTP/1.1" 404 -
127.0.0.1 - - [20/Jan/2018 10:18:13] "GET /editar/2 HTTP/1.1" 500 -
Traceback (most recent call last):
  File "C:\Anaconda3\lib\site-packages\flask\app.py", line 1997, in __call__
    return self.wsgi_app(environ, start_response)
  File "C:\Anaconda3\lib\site-packages\flask\app.py", line 1985, in wsgi_app
    response = self.handle_exception(e)
  File "C:\Anaconda3\lib\site-packages\flask\app.py", line 1540, in handle_exception
    reraise(exc_type, exc_value, tb)
  File "C:\Anaconda3\lib\site-packages\flask\_compat.py", line 33, in reraise
    raise value
  File "C:\Anaconda3\lib\site-packages\flask\app.py", line 1982, in wsgi_app
    response = self.full_dispatch_request()
  File "C:\Anaconda3\lib\site-packages\flask\app.py", line 1614, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "C:\Anaconda3\lib\site-packages\flask\app.py", line 1517, in handle_user_exception
    reraise(exc_type, exc_value, tb)
  File "C:\Anaconda3\lib\site-packages\flask\_compat.py", line 33, in reraise
    raise value
  File "C:\Anaconda3\lib\site-packages\flask\app.py", line 1612, in full_dispatch_request
    rv = self.dispatch_request()
  File "C:\Anaconda3\lib\site-packages\flask\app.py", line 1598, in dispatch_request
    return self.view_functions[rule.endpoint](**req.view_args)
  File "C:\Dev\Alura\Python3\Aula4\jogoteca.py", line 54, in editar
    return redirect(url_for('login', proxima=url_for('editar')))
  File "C:\Anaconda3\lib\site-packages\flask\helpers.py", line 333, in url_for
    return appctx.app.handle_url_build_error(error, endpoint, values)
  File "C:\Anaconda3\lib\site-packages\flask\app.py", line 1805, in handle_url_build_error
    reraise(exc_type, exc_value, tb)
  File "C:\Anaconda3\lib\site-packages\flask\_compat.py", line 33, in reraise
    raise value
  File "C:\Anaconda3\lib\site-packages\flask\helpers.py", line 323, in url_for
    force_external=external)
  File "C:\Anaconda3\lib\site-packages\werkzeug\routing.py", line 1768, in build
    raise BuildError(endpoint, values, method, self)
werkzeug.routing.BuildError: Could not build url for endpoint 'editar'. Did you forget to specify values ['id']?
127.0.0.1 - - [20/Jan/2018 10:18:13] "GET /editar/2?__debugger__=yes&cmd=resource&f=style.css HTTP/1.1" 200 -
127.0.0.1 - - [20/Jan/2018 10:18:13] "GET /editar/2?__debugger__=yes&cmd=resource&f=jquery.js HTTP/1.1" 200 -
127.0.0.1 - - [20/Jan/2018 10:18:13] "GET /editar/2?__debugger__=yes&cmd=resource&f=debugger.js HTTP/1.1" 200 -
127.0.0.1 - - [20/Jan/2018 10:18:14] "GET /editar/2?__debugger__=yes&cmd=resource&f=console.png HTTP/1.1" 200 -
127.0.0.1 - - [20/Jan/2018 10:18:14] "GET /editar/2?__debugger__=yes&cmd=resource&f=ubuntu.ttf HTTP/1.1" 200 -
127.0.0.1 - - [20/Jan/2018 10:18:14] "GET /editar/2?__debugger__=yes&cmd=resource&f=console.png HTTP/1.1" 200 -
 * To enable the debugger you need to enter the security pin:
 * Debugger pin code: 107-791-923
127.0.0.1 - - [20/Jan/2018 10:18:20] "GET /editar/2?__debugger__=yes&cmd=printpin&s=M2CIdWQMZiFzOOY5d5zW HTTP/1.1" 200 -
127.0.0.1 - - [20/Jan/2018 10:18:29] "GET /editar/2?__debugger__=yes&cmd=pinauth&pin=&s=M2CIdWQMZiFzOOY5d5zW HTTP/1.1" 200 -

Caso se acesse a opção Novo Jogo, é solicitada tela de login e após autenticação é possível acessar os links de edição normalmente.

Se comentar as linhas 53 e 54 de jogoteca.py também é possível acessar a tela de edição, porém, sem a autenticação.

Poderiam verificar o que acontece?

TIA,

WB::

2 respostas
solução!

Olá Wilson. Você tem razão e a stack avisa aqui: "Could not build url for endpoint 'editar'. Did you forget to specify values ['id']?"

está perguntando se não esquecemos de passar o id. Olhando código, na linha 53, temos:

if 'usuario_logado' not in session or session['usuario_logado'] == None:
        return redirect(url_for('login', proxima=url_for('editar')))

veja que a próxima url é 'editar' mas este método deve receber um id e não está recebendo, então devemos acrescentar "id=id" como parametro da url_for(), segue:

return redirect(url_for('login', proxima=url_for('editar', id=id)))

veja se isso resolve o problema.

Olá, Thais!

A alteração no código funcionou. Seria uma boa ideia alterar no código fonte do gabarito.

Obrigado!

WB::

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software