soapplibのdjango webserverで

8092 ワード

前にはsudsを使ってwebservice Pythonはhttpsプロトコルに基づくSOAP WebServiceを呼び出します。を呼び出す方法が書かれていましたが、この記事ではSOAP WebServiceを開発するにはどう使いますか?
第一歩はもちろんインストールの問題です。
ダウンロードソフト:
これはダウンロードです。soapplib 2.0-beta 2をダウンロードしました。これからはdjangosnippetを使うつもりです。2.0に基づいています。
開発環境(Mac OS X 10.7.4)でのインストールは順調です。
 $ python setup.py install
しかし、テスト環境(CentOS)では、上記のセットアップ時報の誤りを実行することができます:error:Setup script exited with error:command'gcc'failed with Exit status 1。オンラインで見つけた解決策はlibxml 2、libxml 2-devel、libxslet-develをインストールしてyumでインストールします。
 $yum install libxml2 $yum install libxml2-devel $yum install libxslt-devel
このようなパッケージをインストールする際にはap-getを使いますが、CentOSはyumを使います。ap-getでインストールされているのを見たらap-get install libxml 2-devなどと言います。devをdevelに換えるだけで、yumをcentosやredhatでインストールできます。ネットでいくつかのところのlibxsletのインストールは全部ap-get install libxslat 1-devですが、ユムのカバンにはその“1”がありません。その後、私はlxml 2.3.4のソースバッグをダウンロードしました。
 
*On**Linux*(and most other well-behaved operating systems)、`easury_install`will maage to build the source distribution as libxml 2 and libxslet arproperlyinstalld、includidevelopment packagages、i.e.header files、etc.Use your package package management aattttttttdededededededededededededededededededededededededededededededededededededededededelolololololololololololololololololololololololololololotttttttttttttttttttttttttthey are installed.
その「1」を外して、インストールに成功しました。
次はSOAPウェブservice with soapplib 2.0というものをダウンロードします。最近子供の日が過ぎたばかりで、風が強いので、orgドメインの多くの海外サイトが壁に張られているようです。
from soaplib.core import Application

from soaplib.core.server.wsgi import Application as WSGIApplication

from django.http import HttpResponse





class DjangoSoapApp(WSGIApplication):

    """

    Generic Django view for creating SOAP web services (works with soaplib 2.0)



    Based on http://djangosnippets.org/snippets/2210/

    """



    csrf_exempt = True



    def __init__(self, services, tns):

        """Create Django view for given SOAP soaplib services and tns"""



        return super(DjangoSoapApp, self).__init__(Application(services, tns))



    def __call__(self, request):

        django_response = HttpResponse()



        def start_response(status, headers):

            django_response.status_code = int(status.split(' ', 1)[0])

            for header, value in headers:

                django_response[header] = value



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

        django_response.content = '
'.join(response) return django_response
djangosnippets.orgはいいウェブサイトで、多くの有用なdjangoの小さい部品があります。欠点は、わけがわからない壁やUsageが簡単すぎて、怠けにくいです。彼のソースコードを読まずに直接使用します。このsnippetのUsageは一行だけです。
Usage is the same as before:my_soap_service=Django Soappp([MySOAPService])、_name_
それは前のバージョンも非常に簡単で、これらの引用はこのバージョンではすでに移動しています。やむをえず、soapplib 2.0のソースコードを読んで、対応する位置を修正します。
彼より詳しいUsageを書きましょう。
View.pyのコード:
#     ,soablib2.0    0.9+         

from soaplib.core.model.primitive import Boolean, String

from soaplib.core.service import DefinitionBase, rpc



# the class with actual web methods

class MySOAPService(DefinitionBase):

    @rpc(String, String, _returns=Boolean)

    def Test(self, f1, f2):

        return True

    @rpc(String, _returns=String)

    def HelloWorld(self, name):

        return 'Hello %s!' %name





my_soap_service = DjangoSoapApp([MySOAPService], 'laonan.net')
 
urls.pyのコード:
 url(r'^my-soap-service/service', 'yourproject.yourapp.views.my_soap_service'),

 url(r'^my-soap-service/service.wsdl', 'yourproject.yourapp.views.my_soap_service'),
上記の二つの住所は必ずペアリングします。できればwsdlドキュメントでsoap:addressノードのlocation属性を確認してください。最初のurlはserviceを少なく配合しました。soapplib 2はbeta版であると思っていましたが、どうしていつも見つけられないですか?しばらく調べてからやっとここで間違えました。
以下でテストします。
(1)sudsの取り付け
pythonをインストール
setuptools-0.6 c 9.tar.gzをダウンロードします。
ハpython setup.py install
python-suds-0.4.tar.gzをダウンロードします。
ハpython setup.py install
 
pythonコマンドラインを実行します。
>>from suds.client import Client
>>>ハローclient=Cient('http://127.0.0.1:8080/ my-soap-service/service/?wsdl'
>>レスリング=helloclient.service.Hello World(「carlos」)
>>print relt
ハローcarlos