burada bulduğu resmi öğretici tarafından verilen örnek denedim: Ben kodu birkaç değişiklik yaptıktedarik değişkenler dinamik
http://saratoga.readthedocs.org/en/latest/serviceclasses.html
ve göründüğü gibi nasıl:
http://23.21.167.60:8094/v1/yearlength?name=earth
Benim sorunum, hesap = 211829 URL'sine name = earth.
Aşağıda yazdıklarım çalışıyor çünkü hesap numarasını sınıfa verdim. Bunu dinamik olarak nasıl yaparım?
import json
from saratoga.api import SaratogaAPI, DefaultServiceClass
class PlanetServiceClass(DefaultServiceClass):
def __init__(self, myaccount):
self.yearLength = {
"earth": self.myquery(myaccount),
"pluto": {"seconds": 7816176000}
}
def myquery(self, myaccount):
import pandas as pd
query = ('select * from mydata198 where account = %s ') % (myaccount)
import sqlalchemy
engine = sqlalchemy.create_engine('mysql+pymysql://dba:[email protected]/test')
conn = engine.raw_connection()
df=pd.read_sql(query, conn)
return df.to_json()
class PlanetAPI(object):
class v1(object):
def yearlength_GET(self, request, params):
planetName = params["params"]["name"].lower()
return self.yearLength.get(planetName)
APIDescription = json.load(open("planets.json"))
myAPI = SaratogaAPI(PlanetAPI, APIDescription, serviceClass=PlanetServiceClass('211829'))
myAPI.run(port=8094)
nasıl PlanetServiceClass
için PlanetAPI
sınıftan account_num
değişkeni geçmek?
ve bu konuya MyAPI değiştirmelisiniz:
sonra tekrar o öğretici içinde ne kod kalanını değiştirmek? serviceClass = PlanetServiceClass (account_num) – shantanuo
tamam cevabı güncelledi. Sunucu başlatma zamanı değil, "request" zamanında "account_num" değerini atamanız gerekir. –
Teşekkürler. İşe yaradı. Ancak, yalnızca myquery işlevini her iki sınıfta da kopyaladığımda çalışır. Niye ya? – shantanuo