Melhor maneira de criar um serviço da web python simples [fechado]

137

Uso python há anos, mas tenho pouca experiência com programação web em python. Gostaria de criar um serviço da web muito simples que expõe algumas funcionalidades de um script python existente para uso na minha empresa. Provavelmente retornará os resultados em csv. Qual é a maneira mais rápida de obter algo? Se isso afetar sua sugestão, provavelmente adicionarei mais funcionalidade a isso, mais adiante.

Jeremy Cantrell
fonte
Isso mostra uma amostra rápida e agradável: dreamsyssoft.com/blog/blog.php?/archives/…
Triton Man
github.com/pramttl/webipy Escrevi esta ferramenta que transforma automaticamente suas funções python em pontos de extremidade da web. Ele possui algumas restrições em suas definições de função, mas é de longe a maneira mais rápida de gerar pontos de extremidade da Web para suas funções python. O webipy de fato usa django, mas gera automaticamente visualizações de django necessárias para todas as suas funções python. Você não precisa escrever nenhum "código da web".
Pranjal Mittal

Respostas:

55

Dê uma olhada no werkzeug . O Werkzeug começou como uma coleção simples de vários utilitários para aplicativos WSGI e se tornou um dos mais avançados módulos de utilitários WSGI. Ele inclui um depurador poderoso, objetos de solicitação e resposta com recursos completos, utilitários HTTP para manipular tags de entidade, cabeçalhos de controle de cache, datas HTTP, manipulação de cookies, upload de arquivos, um poderoso sistema de roteamento de URL e vários módulos adicionais de contribuição da comunidade.

Ele inclui muitas ferramentas legais para trabalhar com http e tem a vantagem de poder usá-lo com o wsgi em diferentes ambientes (cgi, fcgi, apache / mod_wsgi ou com um servidor python simples e simples para depuração).

Peter Hoffmann
fonte
2
Acabei usando werkzeug para isso. Eu amo o quão flexível é. Obrigado pela recomendação.
21411 Jeremy Cantrell
1
Eu tentei cerca de três outros frameworks da web antes de chegar a este. Este é o primeiro que eu poderia trabalhar fora da caixa. Great rec!
precisa saber é o seguinte
26

web.py é provavelmente a estrutura da web mais simples existente. O CGI "desencapado" é mais simples, mas você está completamente sozinho quando se trata de criar um serviço que realmente faz alguma coisa.

"Olá Mundo!" de acordo com web.py, não é muito maior que uma versão CGI simples, mas adiciona mapeamento de URL, distinção de comando HTTP e análise de parâmetros de consulta gratuitamente :

import web

urls = (
    '/(.*)', 'hello'
)
app = web.application(urls, globals())

class hello:        
    def GET(self, name):
        if not name: 
            name = 'world'
        return 'Hello, ' + name + '!'

if __name__ == "__main__":
    app.run()
Tim Lesher
fonte
Ah sim, o web.py parece ótimo. A partir de agora, o site < webpy.org > diz: 500 - Erro interno do servidor Caso contrário, nosso código não funcionará para mim: ... app = web.application (urls, globals ()) AttributeError: objeto 'module' tem nenhum atributo 'aplicação'
Bortzmeyer
1
O site está de volta. Você pode verificar sua versão, pois o código de Tim parece correto.
Charlie Martin
1
Eu também encontrei isso. Se você estiver executando o Ubuntu, a versão que acompanha o repositório 8.10 está bastante desatualizada. Pegue o mais novo no site ou use o easy_install e você deve ser dourado.
Bouvard
de acordo com webpy.org (site oficial web.py) Yandex está usando web.py (eles têm 70 milhões de page views / dia) .. por isso deve ser eficiente ..
programador
Isso é exatamente o que eu precisava. Simples, direto ao ponto e fácil de usar.
GuiSim 9/12/12
15

A maneira mais simples de obter um script Python on-line é usar o CGI:

#!/usr/bin/python

print "Content-type: text/html"
print

print "<p>Hello world.</p>"

Coloque esse código em um script que esteja no diretório CGI do servidor da web, torne-o executável e execute-o. O cgimódulo possui vários utilitários úteis quando você precisa aceitar parâmetros do usuário.

Greg Hewgill
fonte
Ao fazer este método make certeza de que o manipulador está configurado adequadamente para scripts python em Apache, exemplo: AddHandler cgi-script .cgi .pl .py
Tegan Snyder
1
O objetivo é executar o aplicativo sem nenhum servidor da Web adicional, como o apache.
AstraSerg 23/08/16
12

O CGI bruto é meio doloroso, o Django é meio pesado. Existem várias estruturas mais simples e leves, por exemplo, CherryPy . Vale a pena procurar um pouco.

Charlie Martin
fonte
2
+1 para CherryPy. É perfeito para quando você quer algo mais simples que o Django.
9788 Steve Losh
9

Veja a implementação de referência WSGI . Você já o possui em suas bibliotecas Python. É bem simples

S.Lott
fonte
Como eu disse, minha experiência com programação web python é bastante limitada, mas um aplicativo WSGI pode ser executado "autônomo", sem um servidor web como o apache, certo?
Jeremy Cantrell
Sim. Totalmente independente. Funciona bem. Você não pode usar a porta 80, no entanto, sem o Apache ou privilégios especiais - mas isso é um problema de segurança do sistema operacional.
S.Lott
4

Se você quer dizer com "Serviço da Web", algo acessado por outros programas SimpleXMLRPCServer pode ser adequado para você. Ele está incluído em todas as instalações do Python desde a Versão 2.2.

Para coisas simples acessíveis ao ser humano, geralmente uso o Pythons SimpleHTTPServer, que também vem com todas as instalações. Obviamente, você também pode acessar o SimpleHTTPServer por programas clientes.

max
fonte
2

A vida é simples se você obtiver uma boa estrutura da web. Os serviços da Web no Django são fáceis. Defina seu modelo, escreva as funções de exibição que retornam seus documentos CSV. Pule os modelos.

S.Lott
fonte
2

Se você quer dizer "serviço da web" no sentido SOAP / WSDL, pode querer examinar Gerando um WSDL usando Python e SOAPpy

che
fonte
Eu só quero dizer "serviço da web" no sentido mais informal. Fornecendo dados via http que serão consumidos por outro aplicativo. Como eu disse na pergunta, provavelmente será csv.
Jeremy Cantrell
WSDL seria provavelmente o mais baseada em padrões ... e que seria para ser consumida ...
Thufir
1

talvez Twisted http://twistedmatrix.com/trac/

mabbit
fonte
Não tenho nada contra o Twisted, mas é exatamente disso que eu queria ficar longe (dependências pesadas).
Jeremy Cantrell
@ Jeremy: Twisted não é pesado.
Nosklo 6/01/09
Concordo que pode ser um pouco assustador à primeira vista, mas não tenho certeza do que você quer dizer com 'dependências pesadas'. Ele usa pacotes do python padrão, tanto quanto eu sei. Existem muitas partes móveis dentro do módulo, mas para coisas simples você não precisa fazer muito.
mabbit