La mejor manera de crear un servicio web simple de Python [cerrado]


137

He estado usando Python durante años, pero tengo poca experiencia con la programación web de Python. Me gustaría crear un servicio web muy simple que exponga algunas funcionalidades de un script python existente para usar dentro de mi empresa. Probablemente devolverá los resultados en csv. ¿Cuál es la forma más rápida de levantar algo? Si afecta su sugerencia, probablemente agregaré más funcionalidades a esto, más adelante.


Esto muestra una buena muestra rápida: dreamsyssoft.com/blog/blog.php?/archives/…
Triton Man

github.com/pramttl/webipy Escribí esta herramienta que transforma automáticamente sus funciones de Python en puntos finales web. Tiene algunas restricciones en las definiciones de sus funciones, pero es, con mucho, la forma más rápida de generar puntos finales web para sus funciones de Python. Infact webipy usa django, pero genera automáticamente las vistas de django requeridas para todas sus funciones de Python. No tiene que escribir ningún "código web".
Pranjal Mittal

Respuestas:


55

Echa un vistazo a werkzeug . Werkzeug comenzó como una simple colección de varias utilidades para aplicaciones WSGI y se ha convertido en uno de los módulos de utilidad WSGI más avanzados. Incluye un poderoso depurador, objetos de solicitud y respuesta con todas las funciones, utilidades HTTP para manejar etiquetas de entidad, encabezados de control de caché, fechas HTTP, manejo de cookies, carga de archivos, un poderoso sistema de enrutamiento de URL y un montón de módulos de complementos contribuidos por la comunidad.

Incluye muchas herramientas geniales para trabajar con http y tiene la ventaja de que puede usarlo con wsgi en diferentes entornos (cgi, fcgi, apache / mod_wsgi o con un servidor Python simple y simple para la depuración).


2
Terminé usando werkzeug para esto. Me encanta lo flexible que es. Gracias por la recomendación.
Jeremy Cantrell

1
Probé con otros tres frameworks web antes de llegar a este. Este es el primero que podría obtener trabajando fuera de la caja. Gran rec!
BenDundee

26

web.py es probablemente el framework web más simple que existe. El CGI "desnudo" es más simple, pero usted está completamente solo cuando se trata de hacer un servicio que realmente haga algo.

"¡Hola Mundo!" de acuerdo con web.py no es mucho más que una versión CGI simple, pero agrega mapeo de URL, distinción de comando HTTP y análisis de parámetros de consulta de forma gratuita :

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()

Ah sí, web.py parece genial. A partir de ahora, el sitio web < webpy.org > dice: 500 - Error interno del servidor De lo contrario, nuestro código no funciona para mí: ... app = web.application (urls, globals ()) AttributeError: objeto 'módulo' no tiene atributo 'aplicación'
bortzmeyer

1
El sitio web ha vuelto. Es posible que desee verificar su versión, ya que el código de Tim se ve bien.
Charlie Martin el

1
Me encontré con esto también. Si está ejecutando Ubuntu, la versión que se incluye en el repositorio 8.10 está bastante desactualizada. Tome el más nuevo del sitio web o use easy_install y debería ser dorado.
bouvard

según webpy.org (el sitio web oficial web.py) yandex está usando web.py (tienen 70 millones de visitas / día) ... así que debe ser eficiente ...
programador

Esto es exactamente lo que necesitaba. Simple, directo al grano y fácil de usar.
GuiSim

15

La forma más simple de obtener un script Python en línea es usar CGI:

#!/usr/bin/python

print "Content-type: text/html"
print

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

Coloque ese código en un script que se encuentre en el directorio CGI de su servidor web, hágalo ejecutable y ejecútelo. El cgimódulo tiene una serie de utilidades útiles cuando necesita aceptar parámetros del usuario.


Al hacer este método, asegúrese de que el controlador esté configurado correctamente para los scripts de Python en Apache, por ejemplo: AddHandler cgi-script .cgi .pl .py
Tegan Snyder

1
El punto es ejecutar la aplicación sin ningún servidor web adicional como apache.
AstraSerg

12

Raw CGI es un poco molesto, Django es un poco pesado. Existen varios marcos más simples y ligeros, por ejemplo, CherryPy . Vale la pena mirar un poco alrededor.


2
+1 para CherryPy. Es perfecto para cuando quieres algo más simple que Django.
Steve Losh

9

Mire la implementación de referencia WSGI . Ya lo tienes en tus bibliotecas de Python. Es bastante simple.


Como dije, mi experiencia con la programación web de Python es bastante limitada, pero una aplicación WSGI se puede ejecutar de forma "independiente", sin un servidor web como Apache, ¿verdad?
Jeremy Cantrell el

Si. Totalmente independiente. Funciona genial. Sin embargo, no puede usar el puerto 80 sin Apache o privilegios especiales, pero eso es un problema de seguridad del sistema operativo.
S.Lott

4

Si quiere decir con "Servicio web", algo a lo que acceden otros programas SimpleXMLRPCServer podría ser adecuado para usted. Se incluye con cada instalación de Python desde la Versión 2.2.

Para cosas simples accesibles para humanos, generalmente uso Pythons SimpleHTTPServer, que también viene con cada instalación. Obviamente, también puede acceder a SimpleHTTPServer mediante programas de cliente.


2

La vida es simple si obtienes un buen marco web. Los servicios web en Django son fáciles. Defina su modelo, escriba las funciones de vista que devuelven sus documentos CSV. Salta las plantillas.


2

Si quiere decir "servicio web" en el sentido SOAP / WSDL, es posible que desee ver Generando un WSDL usando Python y SOAPpy


Solo quiero decir "servicio web" en el sentido más informal. Proporcionar datos a través de http que serán consumidos por alguna otra aplicación. Como dije en la pregunta, es probable que sea csv.
Jeremy Cantrell el

WSDL sería probablemente el más basado en estándares ... y eso sería para ser consumido ...
Thufir

1

No tengo nada en contra de Twisted, pero esto es exactamente de lo que quería alejarme (dependencias pesadas).
Jeremy Cantrell el

@ Jeremy: Twisted no es pesado.
nosklo

Estoy de acuerdo en que puede ser un poco desalentador a primera vista, pero no estoy seguro de lo que quieres decir con 'grandes dependencias'. Utiliza paquetes de Python estándar hasta donde yo sé. Hay muchas partes móviles dentro del módulo, pero para cosas simples no necesita hacer tanto.
mabbit
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.