1 回答

TA貢獻1840條經驗 獲得超5個贊
我最終編寫了每個集成實現都繼承自的 BaseService 類,以及每個實現返回的表單,如:
from service_integrations.forms import CloudServiceOneForm
class BaseService(ABC):
def __init__(self, configuration):
self.configuration = configuration
super().__init__()
@abstractmethod
def get_form(self):
pass
@abstractmethod
def get_service_name(self):
pass
@abstractmethod
def check(self):
pass
@abstractmethod
def run(self):
pass
class CloudServiceOne(BaseService):
def get_service_name(self):
return 'Cloud Service One' # This should match the CharField Choice
def get_form(self):
return CloudServiceOneForm()
def check(self):
# Requirements for config go here
if self.configuration.get('secret_key') and self.configuration.get('access_key'):
return True
else:
return False
def run(self):
pass
以及可以從視圖調用以將相關表單傳遞到上下文的實用程序:
from service_integrations.classes import BaseService
def get_service(service):
# Passes empty configurations to each subclass of BaseService and returns the handler based on the name.
for cls in BaseService.__subclasses__():
if cls({}).get_service_name() == service:
return cls
return None
然后您可以將表單傳遞到上下文中,例如:
service = get_service('Cloud Service One')
context = {
'form': service.get_form()
}
return render(request, 'some_template.html', context)
添加回答
舉報