Python Web services

C
  • 8 Bal '10

Sveiki, iškilo problemėlė, reikia atlikti šiokį tokį darbelį ir reiktų man pakurti web servisa su Python. Serviso esmė, kad iš saito. php (arba vb) užklausomis, kreiptis i servisą ir gauti ko reikia, tada gautus duomenis toliau naudot php pagalba tarkim. googlinau nieko padoraus nerandu kaip ta servisą iškviesti su php ar VB, su pythonu pagal pavyzdzius tai suprantu kas kaip, tik kad ten pasileidžia http://localhost:8080 tarkim tai kaip prieit prie tokio neturiu supratimo. Gal kas ką nors panašaus darę ar susidūrę, būčiau labai dėkingas. gal būt yra koks geresnis serviso kūrimo būdas aš dariau su ZSI pagalba, pradedantysis esu ant Python tai nesmerkit be to sedžiu ant win tai irgi nesmerkit

S
  • 8 Bal '10

Vadink dalykus tikraisiais jų vardais. Kaip supratau, kalėdamas apie kažkokius servisus, kalbi apie SOAP?

Siūlyčiau naudoti soaplib:
http://github.com/jkp/soaplib/blob/mast ... loworld.py

C
  • 29 Bal '10

sveiki dar karteli, sirex dekui už atsakyma aš kažko tokio ir ieškojau, bet ten man pavyzdys tas kazko tais klaida generuoja, nors wsdl lyg ir gera sukuria su soapUI bent jau nerodo kad blogas butų.

saite: http://www.pychef.com/2009/10/creating- ... in-django/
radau lyg tiksliai ko man reikėtų tik va kadangi pradedantysis ant python čia tokių klausimų iškilo gal kas galėsit padėt.
pagal aprašymą susikūriau urls.py :

from django.conf.urls.defaults import patterns
urlpatterns = patterns(
    '',
    (r'^my-soap-service/', 'myproject.mysoapapp.views.my_soap_service'),)

susikūriau views.py:

from myproject.mysoapapp.soap import DjangoSoapApp
from myproject.mysoapapp.soap import soapmethod
from myproject.mysoapapp.soap import soap_types

class MySoapService(DjangoSoapApp):

    __tns__ = 'http://localhost/my-soap-service/'

    @soapmethod(soap_types.String,  _returns=soap_types.String)
    def say_hello(self, name):
        results = 'Hello, %s' %name
        return results

my_soap_service = MySoapService()

taip pat yra ir soap.py kataloge:

import base64

from soaplib.wsgi_soap import SimpleWSGISoapApp
from soaplib.service import soapmethod
from soaplib.serializers import primitive as soap_types

from django.conf import settings
from django.http import HttpResponse

def extract_basic_credentials(request):
    username, password = None, None
    if 'HTTP_AUTHORIZATION' in request.META:
        auth = request.META['HTTP_AUTHORIZATION'].split()
        if len(auth) == 2:
            if auth[0].lower() == "basic":
                username, password = base64.b64decode(auth[1]).split(':')
    return username, password

class Http401(Exception):
    pass

class Http403(Exception):
    pass

class DjangoSoapApp(SimpleWSGISoapApp):

    def authenticate(self, request):
        ws_username = getattr(settings, 'WS_USERNAME', None)

        if ws_username:
            ws_password = getattr(settings, 'WS_PASSWORD', None)
            username, password = extract_basic_credentials(request)

            if username == None:
                raise Http401("401 Authentication required.")

            if username != ws_username or password != ws_password:
                raise Http403("403 Not authorized")

    def __call__(self, request):
        self.authenticate(request)
        django_resp = HttpResponse()

        def start_response(status, headers):
            status, reason = status.split(' ', 1)
            django_resp.status_code = int(status)

            for header, value in headers:
                django_resp[header] = value

        response = super(SimpleWSGISoapApp, self).__call__(request.META, start_response)

        if django_resp.status_code == 405:
            return HttpResponse("405 Method not allowed.", 'text/plain', status=405)

esme tame kad as nesuprantu kaip paleist ta servisa kad jis suktusi kaip pvz kituose pavyzdziuose yra kazkas tokio server_forever ir uztenka paspaust ant sukurto failo ir pasileidzia servisas. tiesa dirbu ant win

#!/usr/bin/env python
import sys, calendar
#Import the SOAP.py machinery
import SOAPpy
CAL_NS = "http://uche.ogbuji.net/eg/ws/simple-cal"
class Calendar:
  def getMonth(self, year, month):
    return calendar.month(year, month)
server = SOAPpy.SOAPServer(("192.168.0.101", 8888))
cal = Calendar()
server.registerObject(cal, CAL_NS)

print "Starting server..."
server.serve_forever()