husonet | Tarih: 18.08.2017
Python Web Servis Sunucu
Python programlama dili kullanarak Web Servis sunucu hizmeti veren yazılım örneği
Bu çalışmamız web servis sunucu hizmeti yapan bir script yazılmasını ve bu hizmetin verilerine erişebilen bir istemci tarafının kodlamasını örnekleyeceğiz.
Gerekli Paketler
apt-get install python-pip
pip install pysimplesoap
Python Web Servis Sunucu Örneği
#!/usr/bin/python
# -*- coding: utf8 -*-
from pysimplesoap.server import SoapDispatcher, SOAPHandler
from BaseHTTPServer import BaseHTTPRequestHandler,HTTPServer
# from http.server import HTTPServer
def CreateOrder(a):
"Return a list"
return '<a>Merhaba Dunya</a> ' + a;
dispatcher = SoapDispatcher(
'Entegre',
location = "http://localhost:8008/",
action = 'http://localhost:8008/', # SOAPAction
namespace = "http://pythontr.com/get.wsdl", prefix="ns0",
trace = True,
ns = True)
dispatcher.register_function('CreateOrder', CreateOrder,
returns={'list':str}, args = {'a':str})
print ("Starting server...")
httpd = HTTPServer(("", 8008), SOAPHandler)
httpd.dispatcher = dispatcher
httpd.serve_forever()
Python Web Servis İstemci Örneği
from suds.client import Client
client = Client ("http://127.0.0.1:8008/")
result = client.service.CreateOrder ('a')
print result
Aşağıdaki verilen örnekler dizi olarak ve daha genişletilmiş bir yapılandırmadır.
Python Web Servis Sunucu Örneği 2
#!/usr/bin/python
# -*- coding: utf8 -*-
################################################################################
# 21.08.2017
# husonet
# Huseyin OZDEMIR
# Bu betik aktarım hizmeti vermesi icin hazirlanmistir.
################################################################################
import os
import hashlib
import cx_Oracle
from pysimplesoap.server import SoapDispatcher, SOAPHandler
from BaseHTTPServer import BaseHTTPRequestHandler,HTTPServer
from SocketServer import ThreadingMixIn
ORACLE_DB_SUNUCU = 'PYTHON/xxxxxx@127.0.0.1/XE'
VERSIYON = 1
os.putenv('ORACLE_HOME','/u01/app/oracle/product/11.2.0/xe')
os.putenv('ORACLE_SID','XE')
os.putenv('NLS_LANG','.AL32UTF8')
os.putenv('PATH','$ORACLE_HOME/bin:$PATH')
# DEBUG ise 1
DEBUG = 0
CREATE_ORDER_TEMPLATE = """
<text>#aciklama#</text>
<success>#success#</success>
<resultDetail>
<ResultDetail>
<CustomerId>#customer_id#</CustomerId>
<CevaId>#ceva_id#</CevaId>
</ResultDetail>
</resultDetail>
"""
#-------------------------------------------------------------------------------
# CheckUser
def CheckUser(cnn, sUserName, sPassword, sCustomerId):
try:
vPassword = hashlib.md5(sPassword).hexdigest()
result = False
cur = cnn.cursor()
sql = '''
SELECT ID
from USER
WHERE ID = :ID AND
USERNAME = :USERNAME AND
SIFRE = :SIFRE
'''
cur.execute(sql, {'ID':sCustomerId,
'USERNAME':sUserName, 'SIFRE':vPassword})
row = cur.fetchone()
if row:
result = True
except Exception, err:
if DEBUG:
raise
else:
print(str(err))
result = False
return result
#-------------------------------------------------------------------------------
# CreateOrder
def CreateOrder(login, order):
"CreateOrder Order Create"
try:
result = CREATE_ORDER_TEMPLATE.replace('#customer_id#', str(login['customer_id']))
cnn = cx_Oracle.connect(ORACLE_DB_SUNUCU)
if CheckUser(cnn, login['username'], login['password'], login['customer_id']) == False:
result = result.replace('#aciklama#','Error User')
result = result.replace('#success#', 'False')
result = result.replace('#ceva_id#', '')
cur = cnn.cursor()
last_id = cur.var(cx_Oracle.NUMBER)
sql = """
INSERT INTO TMP_TEST(
ID,
SIRA,
TROR_TRANSPORTATION_ORDER_TYP,
TROR_TRANSPORTATION_PAYEE_ID,
TRSE_CODE,
TRSE_PAAD_CODE,
TROR_TRANSPORTATION_CONTRACT,
TROR_DEPOSITOR_ID,
TROR_INVENTORY_SITE_ID,
CUST_DESCRIPTION,
TROR_TO_ADRESS,
TROR_TO_CITY_ID,
TROR_ROUTE_ID,
CUST_PACR_REFERENCE,
TROR_CUSTOMER_ORDER_NUMBER,
TROR_DEPOSITOR_DOCUMENT,
TROR_ORDER_DATE,
TROR_PLANNED_SHIPMENT_DATE_TI,
TROR_PLANNED_DELIVERY_DATE_TI,
TROR_DELIVERY_NOTE,
TROR_OFFICIAL_DOCUMENT_NO,
TROD_CODE,
TROD_TRANSPORT_PRODUCT_ID,
TRPR_DESCRIPTION,
TROD_TRANSPORT_PRODUCT_GROUP,
TRPG_DESCRIPTION,
TROD_CU_QUANTITY,
TROD_CU_VRKME,
TROD_VOLUME,
TROD_WEIGHT,
TROD_QUANTITY,
TROR_NOTES,
DUMMY1,
DUMMY2,
DUMMY3,
TROR_TO_DISTRICT,
TROR_TO_ILCE
)
VALUES (
SQ_TMP_ORDER.NEXTVAL,
:SIRA,
:TROR_TRANSPORTATION_ORDER_TYP,
:TROR_TRANSPORTATION_PAYEE_ID,
:TRSE_CODE,
:TRSE_PAAD_CODE,
:TROR_TRANSPORTATION_CONTRACT,
:TROR_DEPOSITOR_ID,
:TROR_INVENTORY_SITE_ID,
:CUST_DESCRIPTION,
:TROR_TO_ADRESS,
:TROR_TO_CITY_ID,
:TROR_ROUTE_ID,
:CUST_PACR_REFERENCE,
:TROR_CUSTOMER_ORDER_NUMBER,
:TROR_DEPOSITOR_DOCUMENT,
:TROR_ORDER_DATE,
:TROR_PLANNED_SHIPMENT_DATE_TI,
:TROR_PLANNED_DELIVERY_DATE_TI,
:TROR_DELIVERY_NOTE,
:TROR_OFFICIAL_DOCUMENT_NO,
:TROD_CODE,
:TROD_TRANSPORT_PRODUCT_ID,
:TRPR_DESCRIPTION,
:TROD_TRANSPORT_PRODUCT_GROUP,
:TRPG_DESCRIPTION,
:TROD_CU_QUANTITY,
:TROD_CU_VRKME,
:TROD_VOLUME,
:TROD_WEIGHT,
:TROD_QUANTITY,
:TROR_NOTES,
:DUMMY1,
:DUMMY2,
:DUMMY3,
:TROR_TO_DISTRICT,
:TROR_TO_ILCE )
returning ID
into :x
"""
sql = sql.decode("UTF-8")
cur.prepare(sql)
cur.execute(None, {
'SIRA': order['sira'],
'TROR_TRANSPORTATION_ORDER_TYP': order['tror_transportation_order_typ'][:20],
'TROR_TRANSPORTATION_PAYEE_ID' : order['tror_transportation_payee_id'],
'TRSE_CODE': order['trse_code'],
'TRSE_PAAD_CODE': order['trse_paad_code'][:4],
'TROR_TRANSPORTATION_CONTRACT': order['tror_transportation_contract'][:3],
'TROR_DEPOSITOR_ID': order['tror_depositor_id'],
'TROR_INVENTORY_SITE_ID': order['tror_inventory_site_id'][:4],
'CUST_DESCRIPTION': order['cust_description'],
'TROR_TO_ADRESS': order['tror_to_adress'],
'TROR_TO_CITY_ID': order['tror_to_city_id'][:3],
'TROR_ROUTE_ID': order['tror_route_id'][:6],
'CUST_PACR_REFERENCE': order['cust_pacr_reference'][:10],
'TROR_CUSTOMER_ORDER_NUMBER': order['tror_customer_order_number'][:10],
'TROR_DEPOSITOR_DOCUMENT': order['tror_depositor_document'][:10],
'TROR_ORDER_DATE': order['tror_order_date'][:10],
'TROR_PLANNED_SHIPMENT_DATE_TI': order['tror_planned_shipment_date_ti'][:10],
'TROR_PLANNED_DELIVERY_DATE_TI': order['tror_planned_delivery_date_ti'][:10],
'TROR_DELIVERY_NOTE': order['tror_delivery_note'][:10],
'TROR_OFFICIAL_DOCUMENT_NO': order['tror_official_document_no'][:16],
'TROD_CODE': order['trod_code'],
'TROD_TRANSPORT_PRODUCT_ID': order['trod_transport_product_id'][:18],
'TRPR_DESCRIPTION': order['trpr_description'],
'TROD_TRANSPORT_PRODUCT_GROUP': order['trod_transport_product_group'][:10],
'TRPG_DESCRIPTION': order['trpg_description'][:10],
'TROD_CU_QUANTITY': order['trod_cu_quantity'],
'TROD_CU_VRKME': order['trod_cu_vrkme'][:3],
'TROD_VOLUME': order['trod_volume'],
'TROD_WEIGHT': order['trod_weight'],
'TROD_QUANTITY': order['trod_quantity'],
'TROR_NOTES': order['tror_notes'],
'DUMMY1': order['dummy1'],
'DUMMY2': order['dummy2'],
'DUMMY3': order['dummy3'],
'TROR_TO_DISTRICT': order['tror_to_district'][:3],
'TROR_TO_ILCE': order['tror_to_ilce'],
'x': last_id
})
cnn.commit()
result = result.replace('#aciklama#', 'Create Order Complete')
result = result.replace('#success#', 'True')
result = result.replace('#ceva_id#', str(int(last_id.getvalue())))
except Exception, err:
if DEBUG:
raise
else:
print(str(err))
result = result.replace('#aciklama#',err)
result = result.replace('#success#', 'False')
result = result.replace('#ceva_id#', '')
return result
dispatcher = SoapDispatcher(
'Entegre',
#location = "http://localhost:8008/",
#action = 'http://localhost:8008/', # SOAPAction
location = "http://xx.xxx.81.240:8008/",
action = 'http://xx.xxx.81.240:8008/', # SOAPAction
namespace = "http://www.pythontr.com/get.wsdl", prefix="ns0",
trace = True,
ns = True)
dispatcher.register_function('CreateOrder', CreateOrder,
returns={'xml':str},
args = {
'login': {
'customer_id':int,
'username':str,
'password':str
},
'order': {
'sira':int,
'tror_delivery_note':str,
'cust_pacr_reference':str,
'tror_transportation_order_typ':str,
'tror_transportation_payee_id':int,
'trse_code':str,
'trse_paad_code':str,
'tror_transportation_contract':str,
'tror_depositor_id':str,
'tror_inventory_site_id':str,·
'cust_description':str,
'tror_to_adress':str,
'tror_to_city_id':str,
'tror_route_id':str,
'tror_customer_order_number':str,
'tror_depositor_document':str,
'tror_order_date':str,
'tror_planned_shipment_date_ti':str,
'tror_planned_delivery_date_ti':str,
'tror_official_document_no':str,
'trod_code':int,
'trod_transport_product_id':str,
'trpr_description':str,
'trod_transport_product_group':str,
'trpg_description':str,
'trod_cu_quantity':float,
'trod_cu_vrkme':str,
'trod_volume':float,
'trod_weight':float,
'trod_quantity':float,
'tror_notes':str,
'dummy1':str,
'dummy2':str,
'dummy3':str,
'tror_to_district':str,
'tror_to_ilce':str
}
}
)
class ThreadedHTTPServer(ThreadingMixIn, HTTPServer):
"""Handle requests in a separate thread."""
if __name__=="__main__":
#print ("Starting server...")
#httpd = HTTPServer(("", 8008), SOAPHandler)
#httpd.dispatcher = dispatcher
#httpd.serve_forever()
server = ThreadedHTTPServer(('', 8008), SOAPHandler)
print 'Starting server, use <Ctrl-C> to stop'
server.dispatcher = dispatcher
server.serve_forever()
Python Web Servis İstemci Örneği 2
from suds.client import Client
from suds.cache import NoCache
USERNAME = 'demo'
PASS = 'demo'
CUSTOMER_ID = 18
client = Client ("http://xx.xxx.81.240:8008/", cache=NoCache())
Login = {'login':{'customer_id': CUSTOMER_ID, 'username': USERNAME, 'password': PASS}}
Login = client.factory.create('CreateOrderlogin')
Login.username = USERNAME
Login.customer_id = CUSTOMER_ID
Login.password = PASS
Order = client.factory.create('CreateOrderorder')
Order.sira =1
Order.tror_delivery_note ='tror_delivery_note'
Order.cust_pacr_reference ='cust_pacr_reference'
Order.tror_transportation_order_typ ='tror_transportation_order_typ'
Order.tror_transportation_payee_id =2
Order.trse_code ='trse_code'
Order.trse_paad_code ='trse_paad_code'
Order.tror_transportation_contract ='tror_transportation_contract'
Order.tror_depositor_id ='tror_depositor_id'
Order.tror_inventory_site_id ='tror_inventory_site_id'
Order.cust_description ='cust_description'
Order.tror_to_adress ='tror_to_adress'
Order.tror_to_city_id ='tror_to_city_id'
Order.tror_route_id ='tror_route_id'
Order.tror_customer_order_number ='tror_customer_order_number'
Order.tror_depositor_document ='tror_depositor_document'
Order.tror_order_date ='tror_order_date'
Order.tror_planned_shipment_date_ti ='tror_planned_shipment_date_ti'
Order.tror_planned_delivery_date_ti ='tror_planned_delivery_date_ti'
Order.tror_official_document_no ='tror_official_document_no'
Order.trod_code =90
Order.trod_transport_product_id ='trod_transport_product_id'
Order.trpr_description ='trpr_description'
Order.trod_transport_product_group ='trod_transport_product_group'
Order.trpg_description ='trpg_description'
Order.trod_cu_quantity =1.0
Order.trod_cu_vrkme ='trod_cu_vrkme'
Order.trod_volume =3.0
Order.trod_weight =4.0
Order.trod_quantity =5.0
Order.tror_notes ='tror_notes'
Order.dummy1 ='dummy1'
Order.dummy2 ='dummy2'
Order.dummy3 ='dummy3'
Order.tror_to_district ='tror_to_district'
Order.tror_to_ilce ='tror_to_ilce'
co = client.factory.create('CreateOrder')
co.login = Login
co.order = Order
result = client.service.CreateOrder( login = co.login, order = co.order )
print result