Djangoの応答で

render_to_response

render_to_response('index.html', locals(),context_instance=RequestContext(request))

パラメータの順序:(テンプレート名、辞書=なし、context_instance =なし)

Djangoのテンプレートシステムでは、二つのパッケージのクラステンプレートの変数がある、1 django.template.Contextが、これは最も一般的に使用され、我々は第二の方法のrender_to_response辞書パラメータを使用している場合、それはこのコンテキストになります渡しますその後、テンプレートを渡し、包装の種類、。

もう一つはdjango.template.RequestContext、Contextクラスであり、2つの違いとそれを比較しました。

第1の相違点は、その最初の引数としてのHttpRequestオブジェクトを渡す必要があり、RequestContextの可変時間を生成することです。

第二に、それは自動的にテンプレートに注入変数の数が増加します、TEMPLATE_CONTEXT_PROCESSORSにおける方法の設定によって返されたこれらの変数を宣言、メソッドTEMPLATE_CONTEXT_PROCESSORSはのHttpRequestオブジェクトを受け取り、そして最終的に辞書を返します。辞書の要素は内部自動的にテンプレートに注入変数RequestContextのとなります。例えばdjango.contrib.auth.context_processors.authは、ユーザー、メッセージ、パーマ変数を返します。

# in django/contrib/auth/context_processors.py
def auth(request):
    """ ignore doc string """
    def get_user():
        ....
 
    return {
        'user': SimpleLazyObject(get_user),
        'messages': messages.get_messages(request),
        'perms':  lazy(lambda: PermWrapper(get_user()), PermWrapper)(),
    }

時には、現在のドメインのすべてのローカル変数が辞書に割り当てられている辞書=地元()この操作を、使用

HttpResponseの違いへの対応

  • HttpResponse

    # django/http/response.py
    # HttpResponse的初始化
    class HttpResponseBase(six.Iterator):
        def __init__(self, content_type=None, status=None, reason=None, charset=None):
    
    class HttpResponse(HttpResponseBase):
        def __init__(self, content=b'', *args, **kwargs):
            super(HttpResponse, self).__init__(*args, **kwargs)
            # Content is a bytestring. See the `content` property methods.
            self.content = content
    • HttpResponseオブジェクトはDjangoの、一般的に使用される機能図によって作成されます
    • スーパー()メソッドは、一般的に、親クラスを呼び出すために使用されます。
      python super(HttpResponse, self).__init__(*args, **kwargs)
      HttpResponse親のそのコール__init__メソッドHttpResponseBase
    • したがって、のHttpResponse形式でのHttpResponse(コンテンツ=応答本体、CONTENT_TYPE =ボリュームデータタイプ、ステータス=ステータスコード応答)
    • フロントエンドJSONデータ型、データ・ディクショナリを必要に応じて、データを手動でJSON形式にする必要があることに注意してください。HttpResponse(json.dumps(データ))
  • 応答

    # rest_framework/response.py
    # Response的初始化
    class Response(SimpleTemplateResponse):
        def __init__(self, data=None, status=None,
                     template_name=None, headers=None,
                     exception=False, content_type=None):
    • 応答オブジェクトのDjango RESTフレームワークは、オブジェクトフレームをカプセル化され
    • レスポンスは自動的に手動変換せずに、データのJSONにデータを渡します。でも、直接レスポンス(データ= serializer.data)
    • 一般APIViewを継承するためのフレームワークのビューDRF応答オブジェクトクラス、ビュークラスで使用されています
    • 機能的なビューを使用することに応答して、@api_view装飾を追加する必要がある、など

      from rest_framework.decorators import api_view
      
      @api_view(['GET', 'POST', ])
      def articles(request, format=None):
          data= {'articles': Article.objects.all() }
          return Response(data, template_name='articles.html')

      デコレータていない場合は、その後、文句を言うだろう:「Accepted_renderer応答に設定されていません。」

おすすめ

転載: www.cnblogs.com/luozx207/p/10968572.html