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.


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


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

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.


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ć.


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.


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.


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.


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


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

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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.