djangoビュー(FBVとCBV)


目次:
  • 単純なビュー関数
  • FBVとCBV
  • requestオブジェクトとresponseオブジェクト
  • JsonResponseオブジェクト
  • 単純なビュー関数
    ビュー関数(クラス)は、Webリクエストを受け入れ、Web応答を返す簡単なPython関数(クラス)です.応答は、ウェブページのHTMLコンテンツ、リダイレクト、404エラー、XMLドキュメント、または画像であってもよい.ビュー自体にどんな論理が含まれているかにかかわらず、応答を返します.コードが現在のプロジェクトディレクトリの下にある限り、どこに書いても構いません.それ以外に要求はない--「不思議なところはない」と言える.コードをどこかに置くために、プロジェクトディレクトリまたはアプリケーションディレクトリにビューを配置するviewsという俗称がある.pyのファイルにあります.
    次に、HTMLドキュメントの形式で現在の日付と時刻を返すビュー関数を示します.
    from django.http import HttpResponse
    import datetime
    
    def current_datetime(request):
        now = datetime.datetime.now()
        html = "It is now %s." % now
        return HttpResponse(html)
    

    作成プロセス:
  • まずdjangoからhttpモジュールにはHttpResponseクラスとPythonのdatetimeライブラリがインポートされています.
  • 次にcurrent_を定義しますdatetime関数.これがビュー関数です.各ビュー関数は、HttpRequestオブジェクトを最初のパラメータとして使用し、通常はrequestと呼ばれます.ビュー関数の名前は重要ではありません.Djangoが認識できるように、統一的なネーミング方法でネーミングする必要はありません.current_と名付けましたDatetimeは、この名前が実装された機能を比較的正確に反映できるためです.
  • このビューは、生成された応答を含むHttpResponseオブジェクトを返します.各ビュー関数は、HttpResponseオブジェクトを返す責任を負います.

  • Djangoは,リクエストと応答オブジェクトを用いてシステムを介して状態を伝達する.ブラウザがサービス側にページを要求すると、Djangoは要求に関するメタデータを含むHttpRequestオブジェクトを作成します.その後、Djangoは対応するビューをロードし、このHttpRequestオブジェクトを最初のパラメータとしてビュー関数に渡します.各ビューは、HttpResponseオブジェクトを返します.
    カタログに戻る
    FBVとCBV
    FBV function based views関数ベースのビューCBV class based viewsクラスベースのビューCBVとFBVルーティングの本質はurl+関数メモリアドレスです
    FBV
    # FBV     
    def add_class(request):
        if request.method == "POST":
            class_name = request.POST.get("class_name")
            models.Classes.objects.create(name=class_name)
            return redirect("/class_list/")
        return render(request, "add_class.html")
    

    CBV
    # CBV     
    from django.views import View
    
    
    class AddClass(View):
    
        def get(self, request):
            return render(request, "add_class.html")
    
        def post(self, request):
            class_name = request.POST.get("class_name")
            models.Classes.objects.create(name=class_name)
            return redirect("/class_list/")
    

    注意:
    CBVを使用する場合urls.pyでも対応する修正を行います.
    # urls.py 
    url(r'^add_class/$', views.AddClass.as_view()),
    

    カタログに戻る
    requestオブジェクトとresponseオブジェクト
    requestオブジェクト
    ページが要求されると、Djangoは、今回の要求元の情報を含むHttpRequestオブジェクトを作成します.Djangoはこのオブジェクトを応答のビュー関数に自動的に渡し、一般的にビュー関数はrequestパラメータを使用してこのオブジェクトを受け取ることになる.
    共通プロパティ
  • path_infoは、ドメイン名
  • を除くユーザーアクセスurlを返します.
  • methodリクエストで使用されるHTTPメソッドの文字列表示、全大文字表示.
  • GETすべてのHTTP GETパラメータを含むクラス辞書オブジェクト
  • POSTは、すべてのHTTP POSTパラメータを含むクラス辞書オブジェクト
  • を含む.
  • body要求体、byteタイプrequest.POSTのデータはbodyから抽出した
  • である.
    公式ドキュメント:https://docs.djangoproject.com/en/1.11/ref/request-response/
    responseオブジェクト
    各ビューは、HttpResponseをインスタンス化し、塗りつぶし、返す必要があります.HttpResponseクラスはdjangoにある.httpモジュールではshortcutsからインポートすることもできます
    例:文字列を渡す
    from django.http import HttpResponse
    response = HttpResponse("Here's the text of the Web page.")
    response = HttpResponse("Text only, please.", content_type="text/plain")
    

    レスポンスヘッダ情報の設定または削除
    response = HttpResponse()
    response['Content-Type'] = 'text/html; charset=UTF-8'
    del response['Content-Type']
    

    共通プロパティ
  • HttpResponse.content:レスポンスコンテンツ
  • HttpResponse.charset:応答コンテンツの符号化
  • HttpResponse.status_code:応答のステータスコード
  • 公式ドキュメント:https://docs.djangoproject.com/en/1.11/ref/request-response/#django.http.HttpResponse
    カタログに戻る
    JsonResponseオブジェクト
    JsonResponseはHttpResponseのサブクラスであり、JSON符号化の応答を生成するのに特化している.
    例:
    from django.http import JsonResponse
    
    response = JsonResponse({
         'foo': 'bar'})
    print(response.content)
    
    b'{"foo": "bar"}'  #   ,json         
    

    注:デフォルトでは辞書タイプのみが渡されます.非辞書タイプを渡すにはsafeキーワードパラメータを設定する必要があります.
    response = JsonResponse([1, 2, 3], safe=False)
    

    json形式のデータ種に中国語がある場合、
    	json.dumps({
         'name':'    '},ensure_ascii = False)
    	JsonResponse(dic,json_dumps_params={
         'ensure_ascii':False})
    

    カタログに戻る