Menu
CoddyTech

Danh sách dưới dạng JSON

Thuộc phần API JSON trong hành trình Django của Coddy. Bài học 2 trên 19.

Chương trình cần một URL liệt kê mọi nhiệm vụ. Không thể đưa Task trực tiếp vào JSON, vì vậy trước tiên phải chuyển từng hàng thành một từ điển. Phương thức QuerySet values() thực hiện việc đó với chính xác những khóa bạn chỉ định. Với mô hình Book của một hiệu sách:

>>> Book.objects.values("title", "year")
<QuerySet [{'title': 'Dune', 'year': 1965}, {'title': 'Emma', 'year': 1815}]>

Kết quả vẫn là một QuerySet mà bộ ghi JSON không biết cách xử lý. list() chạy truy vấn và trả về một danh sách thông thường.

Cuối cùng, JsonResponse chỉ nhận một từ điển, trừ khi bạn truyền safe=False. Nếu không có tham số này, một danh sách sẽ gây ra TypeError:

return JsonResponse(["red", "green", "blue"], safe=False)
challenge icon

Thử thách

Dễ

Liệt kê mọi tác vụ dưới dạng JSON.

  1. Trong tasks/views.py, thêm một khung nhìn task_list trả về danh sách JSON, mỗi tác vụ là một đối tượng có các khóa id, title, done và priority.
  2. Trong tasks/urls.py, thêm tuyến "api/tasks/" có tên task_list.

Nhấn Chạy: bản xem trước mở /api/tasks/ và liệt kê Buy milk, Write the report và Call the bank.

Tự làm thử

from django.http import JsonResponse
from django.shortcuts import render

from .models import Task


def home(request):
    return render(request, "tasks/home.html", {"tasks": Task.objects.all()})


def stats(request):
    data = {
        "total": Task.objects.count(),
        "done": Task.objects.filter(done=True).count(),
    }
    return JsonResponse(data)

Tất cả bài học trong API JSON

Tự luyện tập: Playground Django