web-dev-qa-db-ja.com

Djangoクラスベースの投稿専用ビュー

これが些細な質問の場合は申し訳ありませんが、私はかなり前から探していて、適切な実装を見つけることができませんでした。

Django)で一般的なビューのいずれかをサブクラス化することにより、(ファイルのアップロードを処理できる)投稿専用ビューを実装する方法の例を誰かが提供できますか?

すべてのブログ投稿コメント作成ロジックを処理するエンドポイントを作成したいと思います。コメントフォームはブログページに埋め込まれているため、このデータはPOSTとしてURLに送信されます。

17
sudshekhar

Viewクラスには http_method_names ビューが受け入れるHTTPメソッドをリストする属性。

したがって、任意の汎用ビューをサブクラス化して(たとえば、 CreateView )、http_method_namesなので、POSTリクエストのみが許可されます。

from Django.views.generic.edit import CreateView


class CommentCreateView(CreateView):
    http_method_names = ['post']
    model = Comment
    ...

あるいは、Viewをサブクラス化して、独自のpostメソッドを作成することもできます。

class CommentView(View):

    def post(self, request):
        ...

この場合、GETリクエストを処理するHttpResponseNotAllowedメソッドを定義していないため、GETリクエストはgetレスポンスを返します。

28
Alasdair

あなたは次のようなことを試すことができます:

class MyView(TemplateView):
    template_name = 'my_template.html'

    def post(self, request, **kwargs):
        my_data = request.POST
        # do something with your data
        context = {}  #  set your context
        return super(TemplateView, self).render_to_response(context)
5

docs から:

dispatchはリクエストを調べて、GET、POSTなどであるかどうかを判断し、一致するメソッドにリクエストを中継します、定義されている場合、またはレイズしますHttpResponseNotAllowed

したがって、基本的には、POSTメソッドのみを定義して作成するクラスベースのビューは、POSTリクエストのみを許可します。

3
Sayse

私はこのようなものがうまくいくと思います:

class TestView(View):

    def post(self, request):
        return HttpResponse('This is a post only view')

Django Rest Framework http://www.Django-rest-framework.org/api-guide/generic-views/ #createapiview

作成専用のエンドポイントに使用されます。

Postメソッドハンドラーを提供します。

0
Ankur Gupta