Najlepszy sposób na stworzenie prostej usługi internetowej w języku Python [zamknięte]

137

Używam Pythona od lat, ale mam niewielkie doświadczenie w programowaniu stron internetowych w Pythonie. Chciałbym stworzyć bardzo prostą usługę sieciową, która udostępnia pewne funkcje z istniejącego skryptu Pythona do użytku w mojej firmie. Prawdopodobnie zwróci wyniki w formacie csv. Jaki jest najszybszy sposób na zrobienie czegoś? Jeśli ma to wpływ na twoją sugestię, prawdopodobnie w przyszłości dodam do tego więcej funkcji.

Jeremy Cantrell
źródło
To pokazuje fajną szybką próbkę: dreamsyssoft.com/blog/blog.php?/archives/ ...
Triton Man
github.com/pramttl/webipy Napisałem to narzędzie, które automatycznie przekształca funkcje Pythona w punkty końcowe sieci. Ma pewne ograniczenia dotyczące definicji funkcji, ale jest zdecydowanie najszybszym sposobem generowania punktów końcowych sieci Web dla funkcji Pythona. W rzeczywistości webipy używa django, ale automatycznie generuje widoki django wymagane dla wszystkich funkcji Pythona. Nie musisz pisać żadnego „kodu internetowego”.
Pranjal Mittal

Odpowiedzi:

55

Spójrz na werkzeug . Werkzeug zaczynał jako prosty zbiór różnych narzędzi dla aplikacji WSGI i stał się jednym z najbardziej zaawansowanych modułów narzędziowych WSGI. Zawiera potężny debugger, w pełni funkcjonalne obiekty żądań i odpowiedzi, narzędzia HTTP do obsługi tagów encji, nagłówki kontroli pamięci podręcznej, daty HTTP, obsługę plików cookie, przesyłanie plików, potężny system routingu adresów URL i kilka modułów dodatkowych dostarczonych przez społeczność.

Zawiera wiele fajnych narzędzi do pracy z http i ma tę zaletę, że można go używać z wsgi w różnych środowiskach (cgi, fcgi, apache / mod_wsgi lub z prostym serwerem Pythona do debugowania).

Peter Hoffmann
źródło
2
Skończyło się na tym, że użyłem do tego werkzeug. Uwielbiam jego elastyczność. Dzięki za polecenie.
Jeremy Cantrell
1
Wypróbowałem około trzech innych frameworków internetowych, zanim dotarłem do tego. To pierwszy, który mogłem uruchomić po wyjęciu z pudełka. Świetna nagroda!
BenDundee
26

web.py to prawdopodobnie najprostszy framework sieciowy. „Nagie” CGI jest prostsze, ale jesteś całkowicie sam, jeśli chodzi o tworzenie usługi, która faktycznie coś robi.

"Witaj świecie!" według web.py nie jest dużo dłuższe niż sama wersja CGI, ale dodaje mapowanie adresów URL, rozróżnianie poleceń HTTP i parsowanie parametrów zapytania za darmo :

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
źródło
Ach tak, web.py wydaje się świetny. W tej chwili witryna sieci Web < webpy.org > zawiera komunikat: 500 - wewnętrzny błąd serwera W przeciwnym razie nasz kod nie będzie działał dla mnie: ... app = web.application (urls, globals ()) AttributeError: obiekt „module” nie ma atrybutu „aplikacja”
bortzmeyer
1
Witryna powróciła. Możesz sprawdzić swoją wersję, ponieważ kod Tima wygląda na prawidłowy.
Charlie Martin
1
Ja też na to wpadłem. Jeśli używasz Ubuntu, wersja dostarczana w repozytorium 8.10 jest dość nieaktualna. Pobierz najnowsze ze strony internetowej lub użyj easy_install i powinieneś być złoty.
bouvard
według webpy.org (oficjalnej strony web.py) yandex używa web.py (mają 70 milionów odsłon dziennie) .. więc musi być wydajne ..
programista
Właśnie tego potrzebowałem. Prosty, bezpośredni i łatwy w użyciu.
GuiSim
15

Najprostszym sposobem na pobranie skryptu Pythona online jest użycie CGI:

#!/usr/bin/python

print "Content-type: text/html"
print

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

Umieść ten kod w skrypcie, który znajduje się w katalogu CGI twojego serwera WWW, uczyń go wykonywalnym i uruchom. cgiModuł posiada szereg przydatnych narzędzi, gdy trzeba przyjąć parametry z użytkownikiem.

Greg Hewgill
źródło
Wykonując tę ​​metodę, upewnij się, że program obsługi jest odpowiednio skonfigurowany dla skryptów Pythona w Apache, na przykład: AddHandler cgi-script .cgi .pl .py
Tegan Snyder
1
Chodzi o to, aby uruchomić aplikację bez dodatkowego serwera WWW, takiego jak apache.
AstraSerg
12

Surowe CGI to trochę uciążliwe, Django to rodzaj wagi ciężkiej. Istnieje wiele prostszych, lżejszych frameworków, np . CherryPy . Warto się trochę rozejrzeć.

Charlie Martin
źródło
2
+1 dla CherryPy. Jest idealny, gdy chcesz czegoś prostszego niż Django.
Steve Losh
9

Spójrz na implementację referencyjną WSGI . Masz już to w swoich bibliotekach Pythona. To całkiem proste.

S.Lott
źródło
Tak jak powiedziałem, moje doświadczenie z programowaniem WWW w Pythonie jest dość ograniczone, ale aplikację WSGI można uruchomić „samodzielnie”, bez serwera WWW, takiego jak apache, prawda?
Jeremy Cantrell
Tak. Całkowicie samodzielny. Działa świetnie. Nie możesz jednak używać portu 80 bez Apache lub specjalnych uprawnień - ale jest to problem z bezpieczeństwem systemu operacyjnego.
S.Lott,
4

Jeśli masz na myśli „usługę sieciową ”, coś, do czego mają dostęp inne programy, SimpleXMLRPCServer może być właśnie dla Ciebie. Jest dołączany do każdej instalacji Pythona od wersji 2.2.

W przypadku prostych rzeczy dostępnych dla człowieka zwykle używam Pythona SimpleHTTPServer, który jest również dostarczany z każdą instalacją. Oczywiście możesz również uzyskać dostęp do SimpleHTTPServer przez programy klienckie.

max
źródło
2

Życie jest proste, jeśli masz dobry framework sieciowy. Usługi sieciowe w Django są łatwe. Zdefiniuj swój model, napisz funkcje widoku, które zwracają dokumenty CSV. Pomiń szablony.

S.Lott
źródło
2

Jeśli masz na myśli „usługę sieciową” w sensie SOAP / WSDL, możesz chcieć się przyjrzeć Generowanie WSDL przy użyciu Pythona i SOAPpy

che
źródło
Mam na myśli tylko „usługę sieciową” w najbardziej nieformalnym sensie. Dostarczanie danych za pośrednictwem protokołu HTTP, które będą używane przez inną aplikację. Jak powiedziałem w pytaniu, prawdopodobnie będzie to plik csv.
Jeremy Cantrell
WSDL byłby prawdopodobnie oparty na większości standardów ... i to byłby do konsumpcji ...
Thufir
1

może Twisted http://twistedmatrix.com/trac/

mabbit
źródło
Nie mam nic przeciwko Twisted, ale właśnie od tego chciałem się trzymać z daleka (ciężkie zależności).
Jeremy Cantrell
@Jeremy: Twisted nie jest ciężkie.
nosklo
Zgadzam się, że na pierwszy rzut oka może to być nieco zniechęcające, ale nie jestem pewien, co masz na myśli, mówiąc o „ciężkich zależnościach”. O ile wiem, używa pakietów ze standardowego Pythona. Wewnątrz modułu znajduje się wiele ruchomych części, ale w przypadku prostych rzeczy nie musisz tak dużo robić.
mabbit