HOWTO · Python
Execute Python em HTML
Aprenda a executar Python em HTML
Nesta página
Um navegador não executa Python no servidor só porque um script foi incluído em HTML estático. Para exibir conteúdo gerado por Python, execute Python em um servidor e retorne o resultado na resposta HTTP. Uma aplicação PHP pode iniciar um processo Python para uma integração pequena; em uma aplicação Django, normalmente uma view passa os dados para um template.
Execute scripts Python em páginas HTML com PHP
Salve a página com uma extensão processada pelo PHP, como .php, e disponibilize-a por meio de um servidor PHP configurado. O servidor também precisa ter um interpretador Python e permissão para iniciá-lo. Este exemplo autocontido cria um script Python curto, passa dois argumentos com segurança e inclui o resultado capturado na resposta:
<?php
$pythonScript = <<<'PY'
import sys
name = sys.argv[1]
count = int(sys.argv[2])
print(f"Hello, {name}! Count: {count}")
PY;
$scriptPath = tempnam(sys_get_temp_dir(), 'page-python-');
file_put_contents($scriptPath, $pythonScript);
$command = 'python3 ' . escapeshellarg($scriptPath)
. ' ' . escapeshellarg('Mina')
. ' ' . escapeshellarg('3');
$result = shell_exec($command);
unlink($scriptPath);
?><!doctype html>
<html lang="en">
<body>
<p><?= htmlspecialchars($result ?? '', ENT_QUOTES | ENT_SUBSTITUTE, 'UTF-8') ?></p>
</body>
</html>
Aqui, o PHP inicia python3; o processo Python recebe Mina e 3 como sys.argv[1] e sys.argv[2]. shell_exec() captura a saída do processo, e htmlspecialchars() a codifica antes de inseri-la na página. Esse conteúdo é enviado ao navegador na resposta, não impresso no console do servidor.
shell_exec() precisa estar habilitado pelo host PHP, e a conta do servidor web deve ter permissão para executar o interpretador. O exemplo usa argumentos fixos. Para valores dinâmicos, valide-os e escape cada argumento separadamente com escapeshellarg(); nunca concatene entradas não confiáveis em um comando de shell. Em uma aplicação maior, uma fila de tarefas ou um serviço dedicado pode ser mais adequado do que iniciar um processo a cada requisição.
Execute um script Python em HTML com Django
Em uma aplicação Django, coloque a lógica da aplicação em views Python e passe o resultado para um template. O template renderiza esse valor em HTML no servidor; o navegador recebe a página renderizada e não executa Python. Por exemplo, uma view pode preparar context = {"message": "Hello from Django"} e retornar render(request, "page.html", context), enquanto o template exibe o valor com {{ message }}.
Uma tag de template personalizada é útil quando a lógica de apresentação precisa ser reutilizada em templates. Em um app instalado chamado core, crie core/templatetags/__init__.py e core/templatetags/my_custom_tags.py. Neste último arquivo, importe template de django, defina register = template.Library() e crie uma função decorada com @register.simple_tag, como def greeting(): return "Hello from Django". Reinicie o servidor de desenvolvimento depois de adicionar o pacote templatetags para que o Django o reconheça.
Em um template, carregue o módulo com {% load my_custom_tags %} e chame a tag com {% greeting %}. A tag retorna texto para a renderização do template no servidor; ela não executa Python arbitrário no HTML do navegador. Para valores simples, uma view e o contexto do template costumam ser mais claros do que uma tag personalizada. O Django também oferece filtros integrados, como date, linebreaks, safe e random; consulte a referência dos filtros integrados de template do Django.
Se a página precisar de dados depois de ser carregada, disponibilize uma view Django como endpoint e solicite os dados com fetch() ou outro cliente AJAX. Verifique a autenticação e a autorização antes de retornar dados sensíveis ou executar uma ação. Para requisições POST que alteram estado, use a proteção CSRF do Django e envie o token CSRF. Restringir um endpoint ao método POST, por si só, não o torna seguro. Consulte a documentação de CSRF do Django.
Escolha a invocação de um processo PHP ao integrar um script Python existente e pequeno a um site hospedado em PHP, desde que o host permita essa execução. Em uma aplicação Django, views e templates são a forma usual de calcular e renderizar dados da página; use uma tag personalizada para reutilizar a apresentação no template e um endpoint para dados solicitados depois que a página carregar.