2009-06-30 14 views
2

私はDjango CMSにMetaWeblog APIサポートを追加していますが、アプリケーションをどのように階層化するかは十分にはわかりません。DjangoアプリケーションにAPIを追加する最も良い方法は何ですか?

私はdjango_xmlrpcを使用しています。これにより、リクエストごとにパラメータ化された関数にマップすることができます。これは、サービス関数(AddPage、EditPageなど)からdjangoアプリケーションへの呼び出しでフックするレベルのケースです

django-page-cmsでは、多くのdjangoアプリケーション、ビジネスロジックと検証フォーム内に含まれています。この場合、PageForm(forms.ModelForm)とPageAdmin(ModelAdmin)があり、どちらも多くのロジックと検証が含まれています。

ページとコンテンツのメンテナンスを可能にするAPIを構築する場合、プログラムでページを作成してインスタンスを作成する必要がありますか?その後、例外をキャッチし、APIに相当するものに変換しますか?あるいは、これは悪い考えです - フォームが意図しているものを悪用しますか?

ビジネスとロジックがフォームクラスの外部に保持されるように、コードをリファクタリングすることもできます。それから私はフォームとAPIを持っていて、どちらも別々のビジネスロジックを使います。

他の代替手段はありますか?

ベストソリューションは何ですか?

答えて

2

WebサービスAPIは、URLだけです。

機能を表示するこれらのWS API URLのマップ。

WSビュー関数は、GETとPOST(場合によってはPUTとDELETE)を処理します。

WSビュー機能は、フォームを使用してモデルを使用して、モデルを実行します。

これは、管理インターフェイスのようなものです。 HTMLはありません。

WSビュー関数はJSONメッセージまたはXMLメッセージで応答します。

+0

すでにWebサービスが稼働しています。それは私のアプリのレベルで私はフックをする場合。 たとえば、私のサービス関数AddPage()の場合、管理フォームをプログラムで生成して保存して保存しますか? –

+0

"管理フォーム"が何であるか分かりません。私はモデルフォームが何であるか知っています(http://docs.djangoproject.com/en/dev/topics/forms/modelforms/#modelform)。モデルフォームを使用して、入力を検証し、モデルインスタンスを作成し、オブジェクトをデータベースに保存します。 –

+0

cmsのレイヤーはPageAdmin(ModelAdmin)> PageForm(ModelForm)Page(Model)になります。現時点では、コンテンツを更新する唯一の方法は管理者エリア経由です。私のWebサービスがPageFormを使用し、その後PageAdminが同じビジネスロジックと検証を繰り返さないように少しリファクタリングするのに最適なソリューションがあるようです。 –

0

これはpythonがこれを箱から出してくれないようです。しかし、ABCのモジュールと呼ばれるものがあります:

私は抽象基本クラスを定義することにより、」http://www.doughellmann.com/PyMOTW/abc/から引用、あなたはサブクラスのセットに共通のAPIを定義することができます。この機能は、サードパーティが起こっている状況で特に有用です。実装を提供するために... "=> APIの目標で、契約を定義します。

関連する問題