私はDjangoを初めて使用しています(私は一般的にPythonを初めて使用しています)、私は現在、クラスベースのビューに関連する特定の問題に苦しんでいます。私はLaravelのPHPから来ています。そこでは、いわゆる "RESTfulなリソースコントローラ"があります。Djangoでのリソースビュー
Laravelに精通していない人は、「リソース」ごとに1つのコントローラ(またはDjangoでの表示)を使用することが考えられます。このコントローラ/ビューでは、扱っている場合は、これらの制御方法のための関連URLとHTTPメソッドは、(例えば、それぞれGET /photos
、GET /photos/1
、GET /photos/create
、POST /photos
、GET /photos/1/edit
あるなどindex()
、show()
、create()
、store()
、edit()
、などの方法を定義します写真付き)。 Laravelのルーティングでは、ただ一つの行Route::resource('photos', 'PhotoController')
を宣言する必要があり、それらのURLは自動的に生成されます。詳細は、Laravel's docsを参照してください。
私はこのパターンが本当に好きです。私はこれをDjangoで使いたいと思います。
私が理解する限り、Djangoには本当にそのようなものはありません。 Djangoにはクラスベースのビューがありますが、それらはリソースを表しません。むしろ、あなたの 'index()'(PhotoListView
)、あなたの 'show()'(PhotoDetailView
)のビューなどのビューがあります。
私はこのパターンをDjangoでどのように実装すべきか分かりません。私が欲しいものが良いかどうかは分かりません。
調査した結果、私は使用であるかもしれないいくつかの情報が見つかりました:
http://watchitlater.com/blog/2010/02/django-restful-resources/
https://baxeico.wordpress.com/2014/06/25/put-and-delete-http-requests-with-django-and-jquery/
私は最初のリンクからカスタムViewクラスが実現かわからないんだけどをその株式ジャンゴ見ることができます」 (通常のDjango Viewは多かれ少なかれ同じことをやっているのですが)、私は二番目のリンクが私が望むものとまったく同じではないと思います。(正しく理解すれば、ミドルウェアは問題の解決策DjangoはDELETE/PUTリクエストで送信されたデータを要求に入れない)。
このように、特定のリソースのすべてのURLと一致するのURLconf内の1行を使用します:
url(r'^photos/(.*)$', PhotoView.as_view())
はこれに基づき、私は2つの潜在的な解決策を考案しました
as_view()
カスタムView基本クラスの機能では、/photos
,/photos/1
、/photos/1/edit
などのURLのルーティングが正しいクラスメソッドに処理されます。欠点は、ルーティングをビューに配置して(正しい場所ではなく)、名前付きパターンをこの方法で使用して、コードの別の場所にあるURLを参照できないことです。それはLaravelでの作品の仕方に最も近い。各URLのためのURLconfで利用別々のライン、のように:
url(r'^photos$', PhotoView.index) url(r'^photos/(\d+)$', PhotoView.show) url(r'^photos/(\d+)/edit$', PhotoView.edit)
これの利点は、名前のパターンはいつものように動作することで、すべてのルーティングはURLconfの中にとどまります。しかし、私はどのようにViewクラスの実装の面でこれを達成するのかわかりません(私はすべてのメソッドを@classonlymethod、右に飾らなければならないでしょう)。
申し訳ありませんが、私はテキストの壁紙のために、これをどのように解決するかについてのご意見を喜んでお聞きします。あるいは、私はちょうど狂ったばかげただけで、私はちょうどすべての通常のDjangoコーダーのような関数ベースのビューを使うべきですか?
あなたは[DjangoのRESTフレームワーク](http://www.django-rest-framework.org/)を見たことがありますか? –
@JensAstrupはい、私は(繰り返し)それに遭遇しました。私はAPIを構築するのではなく、Webサイト/ Webアプリケーションを構築しています。 – Compizfox