【Python+Django+Docker+VS Code】使用API获取Json,并返回Json格式

环境备注
⭐️macOS Monterey
⭐️Python 3.11.1
⭐️Django 4.1.6
⭐️Visual Studio Code 1.75.0 ←Mac OS版本
⭐️Docker Desktop 4.11.1 ←Mac OS版本

1. 建立環境

在下面,创建环境。
创建Django项目并创建Django应用程序。

 

在新创建的Django项目中的urls.py文件。

from django.contrib import admin
from django.urls import path, include

# XXXXは、新規作成したDjangoのアプリケーションのurls
urlpatterns = [
    path('admin/', admin.site.urls),
    path('', include('XXXX.urls'))
]

设置urlpatterns

在新创建的Django应用程序的urls中设置以下的urlpatterns。

from django.urls import path
from . import views

urlpatterns = [
    path('non/books/', views.func_books, name='books')
]

设定view

我們可以在新建的Django應用程式的views中實現代碼,通過API獲取JSON並返回JSON格式。

# from django.shortcuts import render
from nonDjangoApp3.settings import BASE_DIR
import json
from django.http.response import JsonResponse
from django.views.decorators.csrf import csrf_exempt

@csrf_exempt
def func_books(request):
    if request.method == 'POST':
        # JSON文字列
        result_data = json.loads(request.body)

        ### book no 取得 ###
        # book_no = result_data.get('bookNo')

        ### bookList no ###
        # book_list = result_data.get('bookList')
        # no = book_list[0]['no']

        ### userDataList name ###
        # user_data_list = book_list[0]['userDataList']
        # name = user_data_list[2]['name']

        ### bookList no 一括取得 ###
        name = ((result_data.get('bookList'))[2]['userDataList'])[2]['name']

        json_data = {'name': name}
        return JsonResponse(json_data, safe=False)
    else:
        # print('get')
        json_data = {'message': 'GETです'}
        return JsonResponse(json_data, safe=False)

执行API请求

スクリーンショット 2023-02-18 18.12.22.png
POST http://127.0.0.1:8000/non/books/ HTTP/1.1
content-type: application/json

  {
    "bookNo": "bookNo1",
    "bookName": "bookName1",
    "bookColor": "yellow",
    "bookList": [
      {
        "no": 1,
        "noName": "noNameA1",
        "total": 100,
        "userDataList": [
          {
            "id": 1,
            "name": "name1",
            "amount": 1001
          },
          {
            "id": 2,
            "name": "name2",
            "amount": 1002
          },
          {
            "id": 3,
            "name": "name3",
            "amount": 1003
          },
          {
            "id": 4,
            "name": "name4",
            "amount": 1004
          }
        ],
        "pageList": [
          {
            "page": 1,
            "pageName": "pageName1",
            "total": 1000,
            "picDataList": [
              {
                "picId": 11,
                "picName": "picName11",
                "picAmount": 1101
              },
              {
                "picId": 12,
                "picName": "picName12",
                "picAmount": 1102
              },
              {
                "picId": 13,
                "picName": "picName13",
                "picAmount": 1103
              },
              {
                "picId": 14,
                "picName": "picName14",
                "picAmount": 1104
              },
              {
                "picId": 15,
                "picName": "picName15",
                "picAmount": 1105
              }
            ]
          }
        ]
      },
      {
        "no": 2,
        "noName": "noNameA2",
        "total": 200,
        "userDataList": [
          {
            "id": 21,
            "name": "name21",
            "amount": 21001
          },
          {
            "id": 22,
            "name": "name22",
            "amount": 21002
          },
          {
            "id": 23,
            "name": "name23",
            "amount": 21003
          },
          {
            "id": 24,
            "name": "name24",
            "amount": 21004
          }
        ],
        "pageList": [
          {
            "page": 21,
            "pageName": "pageName21",
            "total": 2000,
            "picDataList": [
              {
                "picId": 21,
                "picName": "picName21",
                "picAmount": 2101
              },
              {
                "picId": 22,
                "picName": "picName22",
                "picAmount": 2102
              },
              {
                "picId": 23,
                "picName": "picName23",
                "picAmount": 2103
              },
              {
                "picId": 24,
                "picName": "picName24",
                "picAmount": 2104
              },
              {
                "picId": 25,
                "picName": "picName25",
                "picAmount": 2105
              }
            ]
          }
        ]
      },
      {
        "no": 3,
        "noName": "noNameA3",
        "total": 300,
        "userDataList": [
          {
            "id": 31,
            "name": "name31",
            "amount": 31001
          },
          {
            "id": 32,
            "name": "name32",
            "amount": 31002
          },
          {
            "id": 33,
            "name": "name33",
            "amount": 31003
          },
          {
            "id": 34,
            "name": "name34",
            "amount": 31004
          }
        ],
        "pageList": [
          {
            "page": 31,
            "pageName": "pageName31",
            "total": 3000,
            "picDataList": [
              {
                "picId": 31,
                "picName": "picName31",
                "picAmount": 3101
              },
              {
                "picId": 32,
                "picName": "picName32",
                "picAmount": 3102
              },
              {
                "picId": 33,
                "picName": "picName33",
                "picAmount": 3103
              },
              {
                "picId": 34,
                "picName": "picName34",
                "picAmount": 3104
              },
              {
                "picId": 35,
                "picName": "picName35",
                "picAmount": 3105
              }
            ]
          }
        ]
      }
    ]
  }

スクリーンショット 2023-02-18 18.16.35.png

做好了!

在VS Code的REST Client中测试API的方法在这里记录着。

 

bannerAds