kawaz.core.views.preview のソースコード

import json

[ドキュメント]class SingleObjectPreviewViewMixin(object): """ プレビューを行うためのViewを作るMixin SingleObjectMixin と共に使用することが前提で、SingleObjectMixin にて定義 される `get_object(queryset=None)` メソッドを上書きする。 上記上書きされたメソッドは POST にて渡されたパラメータを元に仮想モデル インスタンスを生成し返すため、このMixinが適用されたビューはモデルの保存 などを行わずしてテンプレートにてモデルインスタンスのように扱うことが可能 Note: 実際に返されるオブジェクトは辞書であるためテンプレート以外では動かない RESTの原則的にはGETで行うのがふさわしいが、GETだと、長い本文を送信したときに 413エラーを送出してしまうため、POSTで行っている """
[ドキュメント] def get_object(self, queryset=None): """ POSTで渡された値を元に仮想オブジェクトを構築し返す """ # Use 'queryset' of specified or 'get_queryset' queryset = queryset or self.get_queryset() # Use 'model' of queryset or 'model' attribute model = getattr(queryset, 'model', self.model) fields = [f.name for f in model._meta.get_fields()] # Ref https://docs.djangoproject.com/en/dev/releases/1.5/#non-form-data-in-http-requests # http://stackoverflow.com/questions/1208067/wheres-my-json-data-in-my-incoming-django-request # Django1.5からAjaxではrequest.POSTでQueryDictを取れなくなったので、JSONに変換している params = json.loads(self.request.body.decode('utf-8')) # filter field values return {k: v for k, v in params.items() if k in fields}
[ドキュメント] def post(self, request, *args, **kwargs): self.object = self.get_object() context = self.get_context_data(object=self.object) return self.render_to_response(context)