Meilleur moyen de créer un service Web Python simple [fermé]

137

J'utilise python depuis des années, mais j'ai peu d'expérience avec la programmation Web python. J'aimerais créer un service Web très simple qui expose certaines fonctionnalités d'un script python existant à utiliser au sein de mon entreprise. Il renverra probablement les résultats au format csv. Quel est le moyen le plus rapide de créer quelque chose? Si cela affecte votre suggestion, j'ajouterai probablement plus de fonctionnalités à cela, plus tard.

Jeremy Cantrell
la source
Cela montre un bel exemple rapide: dreamyssoft.com/blog/blog.php?/archives/…
Rocky Pulley
github.com/pramttl/webipy J'ai écrit cet outil qui transforme automatiquement vos fonctions python en points de terminaison Web. Il a certaines restrictions sur vos définitions de fonctions, mais c'est de loin le moyen le plus rapide de générer des points de terminaison Web pour vos fonctions python. Infact webipy utilise django, mais il génère automatiquement les vues django requises pour toutes vos fonctions python. Vous n'avez pas à écrire de "code Web".
Pranjal Mittal

Réponses:

55

Jetez un œil à werkzeug . Werkzeug a commencé comme une simple collection de divers utilitaires pour les applications WSGI et est devenu l'un des modules utilitaires WSGI les plus avancés. Il comprend un débogueur puissant, des objets de requête et de réponse complets, des utilitaires HTTP pour gérer les balises d'entité, les en-têtes de contrôle du cache, les dates HTTP, la gestion des cookies, les téléchargements de fichiers, un puissant système de routage d'URL et un tas de modules complémentaires fournis par la communauté.

Il comprend de nombreux outils sympas pour travailler avec http et a l'avantage de pouvoir l'utiliser avec wsgi dans différents environnements (cgi, fcgi, apache / mod_wsgi ou avec un simple serveur python pour le débogage).

Peter Hoffmann
la source
2
J'ai fini par utiliser werkzeug pour cela. J'adore sa flexibilité. Merci pour la recommandation.
Jeremy Cantrell le
1
J'ai essayé environ trois autres frameworks Web avant d'arriver à celui-ci. C'est le premier que je pourrais faire travailler hors de la boîte. Super rec!
BenDundee
26

web.py est probablement le framework Web le plus simple. CGI "Bare" est plus simple, mais vous êtes complètement seul quand il s'agit de créer un service qui fait réellement quelque chose.

"Bonjour le monde!" selon web.py n'est pas beaucoup plus long qu'une version CGI nue, mais il ajoute le mappage d'URL, la distinction de commande HTTP et l'analyse des paramètres de requête gratuitement :

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
la source
Ah oui, web.py semble génial. À partir de maintenant, le site Web < webpy.org > dit: 500 - Erreur interne du serveur Sinon, notre code ne fonctionne pas pour moi: ... app = web.application (urls, globals ()) AttributeError: objet 'module' n'a pas d'attribut 'application'
bortzmeyer
1
Le site Web est de retour. Vous voudrez peut-être vérifier votre version, car le code de Tim semble correct.
Charlie Martin
1
J'ai rencontré ça aussi. Si vous utilisez Ubuntu, la version fournie dans le référentiel 8.10 est assez obsolète. Prenez le plus récent sur le site Web ou utilisez easy_install et vous devriez être en or.
bouvard
selon webpy.org (le site officiel web.py) yandex utilise web.py (ils ont 70 millions de pages vues / jour) .. donc ça doit être efficace ..
programmeur
C'est exactement ce dont j'avais besoin. Simple, direct et facile à utiliser.
GuiSim
15

Le moyen le plus simple de mettre en ligne un script Python est d'utiliser CGI:

#!/usr/bin/python

print "Content-type: text/html"
print

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

Mettez ce code dans un script qui réside dans le répertoire CGI de votre serveur Web, rendez-le exécutable et exécutez-le. Le cgimodule dispose d'un certain nombre d'utilitaires utiles lorsque vous devez accepter des paramètres de l'utilisateur.

Greg Hewgill
la source
Lorsque vous utilisez cette méthode, assurez-vous que le gestionnaire est correctement configuré pour les scripts python dans Apache, exemple: AddHandler cgi-script .cgi .pl .py
Tegan Snyder
1
Le but est d'exécuter l'application sans serveur Web supplémentaire comme apache.
AstraSerg
12

Le CGI brut est une sorte de douleur, Django est une sorte de poids lourd. Il existe un certain nombre de frameworks plus simples et plus légers, par exemple CherryPy . Cela vaut la peine de regarder un peu.

Charlie Martin
la source
2
+1 pour CherryPy. C'est parfait lorsque vous voulez quelque chose de plus simple que Django.
Steve Losh
9

Regardez l' implémentation de référence WSGI . Vous l'avez déjà dans vos bibliothèques Python. C'est assez simple.

S.Lott
la source
Comme je l'ai dit, mon expérience avec la programmation Web python est assez limitée, mais une application WSGI peut être exécutée "autonome", sans serveur Web comme Apache, non?
Jeremy Cantrell le
Oui. Totalement autonome. Fonctionne très bien. Cependant, vous ne pouvez pas utiliser le port 80 sans Apache ni privilèges spéciaux - mais c'est un problème de sécurité du système d'exploitation.
S.Lott
4

Si vous voulez dire avec "Web Service" quelque chose accédé par d'autres programmes SimpleXMLRPCServer pourrait vous convenir. Il est inclus avec chaque installation de Python depuis la version 2.2.

Pour les choses simples accessibles aux humains, j'utilise généralement Pythons SimpleHTTPServer qui est également fourni avec chaque installation. De toute évidence, vous pouvez également accéder à SimpleHTTPServer par des programmes clients.

max
la source
2

La vie est simple si vous obtenez un bon framework Web. Les services Web dans Django sont faciles. Définissez votre modèle, écrivez des fonctions de vue qui renvoient vos documents CSV. Ignorez les modèles.

S.Lott
la source
2

Si vous voulez dire "service Web" au sens SOAP / WSDL, vous voudrez peut-être regarder Générer un WSDL à l'aide de Python et SOAPpy

che
la source
Je veux simplement dire "service Web" dans le sens le plus informel du terme. Fournir des données via http qui seront utilisées par une autre application. Comme je l'ai dit dans la question, ce sera probablement csv.
Jeremy Cantrell
WSDL serait probablement le plus basé sur les normes ... et ce serait pour être consommé ...
Thufir
1

peut-être Twisted http://twistedmatrix.com/trac/

mabbit
la source
Je n'ai rien contre Twisted, mais c'est exactement ce dont je voulais éviter (lourdes dépendances).
Jeremy Cantrell
@Jeremy: Twisted n'est pas lourd.
nosklo
Je suis d'accord que cela peut être un peu intimidant à première vue, mais je ne suis pas sûr de ce que vous entendez par «dépendances lourdes». Il utilise des packages de python standard pour autant que je sache. Il y a beaucoup de pièces mobiles à l'intérieur du module, mais pour des choses simples, vous n'avez pas besoin d'en faire beaucoup.
mabbit