Basit bir python web hizmeti oluşturmanın en iyi yolu [kapalı]


137

Yıllardır python kullanıyorum, ancak python web programlama konusunda çok az tecrübem var. Şirketimde kullanmak üzere mevcut bir python betiğinden bazı işlevleri ortaya çıkaran çok basit bir web hizmeti oluşturmak istiyorum. Muhtemelen sonuçları csv olarak döndürecektir. Bir şeyi kaldırmanın en hızlı yolu nedir? Eğer önerinizi etkiliyorsa, muhtemelen buna daha fazla işlevsellik ekleyeceğim.


Bu güzel bir hızlı örnek gösterir: dreamsyssoft.com/blog/blog.php?/archives/…
Rocky Pulley

github.com/pramttl/webipy Python işlevlerinizi otomatik olarak web uç noktalarına dönüştüren bu aracı yazdım. İşlev tanımlarınızla ilgili bazı kısıtlamalar vardır, ancak python işlevleriniz için web uç noktaları oluşturmanın en hızlı yoludur. Infact webipy django kullanır, ancak otomatik olarak tüm python işlevleriniz için gerekli django görünümleri oluşturur. Herhangi bir "web kodu" yazmak zorunda değilsiniz.
Pranjal Mittal

Yanıtlar:


55

Werkzeug'a bir bak . Werkzeug, WSGI uygulamaları için çeşitli yardımcı programlardan oluşan basit bir koleksiyon olarak başladı ve en gelişmiş WSGI yardımcı program modüllerinden biri haline geldi. Güçlü bir hata ayıklayıcı, tam özellikli istek ve yanıt nesneleri, varlık etiketlerini işlemek için HTTP yardımcı programları, önbellek kontrol başlıkları, HTTP tarihleri, çerez işleme, dosya yüklemeleri, güçlü bir URL yönlendirme sistemi ve bir grup topluluk katkısı eklenti modülü içerir.

Http ile çalışmak için birçok harika araç içerir ve farklı ortamlarda (cgi, fcgi, apache / mod_wsgi veya hata ayıklama için basit bir basit python sunucusu ile wsgi ile kullanabilme avantajına sahiptir.


2
Bunun için werkzeug kullanarak sona erdi. Ne kadar esnek olduğunu seviyorum. Tavsiye için teşekkürler.
Jeremy Cantrell

1
Buna gelmeden önce diğer üç web çerçevesini denedim. Bu kutunun dışında çalışabileceğim ilk şey. Büyük rec!
BenDundee

26

web.py muhtemelen en basit web çerçevesidir. "Çıplak" CGI daha basittir, ancak aslında bir şey yapan bir hizmet yapmak söz konusu olduğunda tamamen kendi başınıza olursunuz.

"Selam Dünya!" web.py'ye göre, çıplak bir CGI sürümünden çok daha uzun değildir, ancak URL eşlemesi, HTTP komut ayrımı ve sorgu parametresi ayrıştırmasını ücretsiz olarak ekler :

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 evet, web.py harika görünüyor. Şu an itibariyle, < webpy.org > Web sitesi şöyle diyor: 500 - Dahili Sunucu Hatası Aksi takdirde, kodumuz benim için çalışmıyor: ... app = web.application (urls, globals ()) AttributeError: 'module' object 'uygulama' özelliği yok
bortzmeyer

1
Web sitesi geri döndü. Tim'in kodu doğru göründüğü için sürümünüzü kontrol etmek isteyebilirsiniz.
Charlie Martin

1
Ben de bununla karşılaştım. Ubuntu çalıştırıyorsanız, 8.10 deposunda gönderilen sürüm oldukça güncel değil. Web sitesinden en yeni tut veya easy_install kullanın ve altın olmalısınız.
bouvard

webpy.org (resmi web.py web sitesine) göre yandex web.py (günde 70 milyon sayfa görüntüleme sayısına sahip) kullanıyor .. bu yüzden verimli olmalı ..
programcı

Tam da ihtiyacım olan şey bu. Basit, doğrudan noktaya ve kullanımı kolay.
GuiSim

15

Python betiğini çevrimiçi almanın en basit yolu CGI kullanmaktır:

#!/usr/bin/python

print "Content-type: text/html"
print

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

Bu kodu web sunucusu CGI dizininizde bulunan bir komut dosyasına yerleştirin, yürütülebilir yapın ve çalıştırın. cgiModül kullanıcıdan parametreleri kabul etmeleri gerekmektedir yararlı yarar bir numarası vardır.


Bu yöntemi yaparken, işleyicinin Apache'deki python komut dosyaları için uygun şekilde ayarlandığından emin olun, örnek: AddHandler cgi-script .cgi .pl .py
Tegan Snyder

1
Mesele, apache gibi ek bir web sunucusu olmadan uygulamayı çalıştırmaktır.
AstraSerg

12

Ham CGI biraz acıdır, Django biraz ağırdır. Hakkında daha basit, daha hafif çerçeveler vardır, örneğin CherryPy . Biraz etrafa bakmaya değer.


2
CherryPy için +1. Django'dan daha basit bir şey istediğinizde mükemmeldir.
Steve Losh

9

Bak WSGI referans uygulanması . Python kütüphanelerinizde zaten var. Oldukça basit.


Dediğim gibi, python web programlama ile ilgili deneyimim oldukça sınırlıdır, ancak bir WSGI uygulaması apache gibi bir web sunucusu olmadan "bağımsız" çalıştırılabilir, değil mi?
Jeremy Cantrell

Evet. Tamamen bağımsız. Harika çalışıyor. Bununla birlikte, 80 numaralı bağlantı noktasını Apache veya özel ayrıcalıklar olmadan kullanamazsınız - ancak bu bir OS güvenlik sorunudur.
S.Lott

4

"Web Hizmeti" ile kastediyorsanız, diğer Programlar tarafından erişilen bir şey SimpleXMLRPCServer sizin için uygun olabilir. Sürüm 2.2'den beri her Python kurulumunda bulunur.

Basit insan erişilebilir şeyler için genellikle her kurulumda gelen Pythons SimpleHTTPServer kullanıyorum . Açıkçası, SimpleHTTPServer'a istemci programları ile de erişebilirsiniz.


2

İyi bir web çerçevesi elde ederseniz hayat basittir. Django'daki web servisleri kolaydır. Modelinizi tanımlayın, CSV belgelerinizi döndüren görünüm işlevleri yazın. Şablonları atla.


2

SOAP / WSDL anlamda "web hizmeti" demek istiyorsanız, Python ve SOAPpy kullanarak WSDL oluşturma


En gayrı resmi anlamda "web hizmeti" demek istiyorum. Başka bir uygulama tarafından tüketilecek http üzerinden veri sağlama. Soruda söylediğim gibi, muhtemelen csv olacaktır.
Jeremy Cantrell

WSDL muhtemelen en standartlara dayalı olacaktır ... ve bu tüketilmek için olurdu ...
Thufir

1

belki bükülmüş http://twistedmatrix.com/trac/


Twisted'a karşı hiçbir şeyim yok, ama tam olarak uzak durmak istediğim şey bu (ağır bağımlılıklar).
Jeremy Cantrell

@Jeremy: Bükülmüş ağır değil.
nosklo

i ilk bakışta biraz ürkütücü olabileceğini kabul ediyorum, ama 'ağır bağımlılıklar' ile ne demek istediğinizden emin değilim. Bildiğim kadarıyla standart python paketleri kullanıyor. Modülün içinde çok sayıda hareketli parça var, ancak basit şeyler için o kadar çok şey yapmanız gerekmez.
mabbit
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.