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.