Tôi sẽ bắt đầu với lượt xem. View và viewsets là các lớp trong DRF, nơi mà hầu hết các logic ứng dụng xảy ra.
Ví dụ: ModelViewSet là lớp chịu trách nhiệm cho các hoạt động CRUD để đáp ứng các phương thức POST, PUT, PATCH, GET, DELETE HTTP.
Cho phép xem xét phương thức tạo mặc định từ https://github.com/tomchristie/django-rest-framework/blob/master/rest_framework/mixins.py phương pháp này tạo cá thể mô hình của bạn, từ dữ liệu (nếu chúng hợp lệ) gửi qua phương thức HTTP POST và lưu chúng vào cơ sở dữ liệu.
def create(self, request, *args, **kwargs):
serializer = self.get_serializer(data=request.data)
serializer.is_valid(raise_exception=True)
self.perform_create(serializer)
headers = self.get_success_headers(serializer.data)
return Response(serializer.data, status=status.HTTP_201_CREATED, headers=headers)
def perform_create(self, serializer):
serializer.save()
Đây là những gì đang diễn ra ở đây.
self.get_serializer() tạo phiên bản mới của bộ nối tiếp (bạn đặt lớp trình tự tuần tự trước), phải có request.data làm đối số. request.data là (đây là nội dung nhập) từ điển. Từ điển là cấu trúc dữ liệu python chung.
serializer.is_valid() phương pháp kiểm tra nếu request.data hợp lệ. Nếu có, bạn có thể truy cập serializer.data - cũng là từ điển.
serializer.save() phương pháp tạo và duy trì phiên bản thực tế của mô hình của bạn (Đoạn trích) vào cơ sở dữ liệu. Bạn có thể truy cập trực tiếp vào trường hợp như thế này
instance = serializer.save()
Sau đó, bạn trả về Đối tượng phản hồi được điền với serializer.data về máy khách.
Như bạn có thể thấy, có no Dữ liệu biểu mẫu, JSON, XML, HTML, v.v. trong chế độ xem. Bạn làm việc với các kiểu dữ liệu python và serializer là một từ điển "dịch", ví dụ về mô hình cụ thể của bạn và ngược lại. Nhưng khách hàng gửi dữ liệu (trong trường hợp của bạn) trong yêu cầu HTTP dưới dạng JSON.
JSONParser chịu trách nhiệm chuyển đổi JSON thành từ điển. Phân tích cú pháp được thực hiện bên trong lớp yêu cầu https://github.com/tomchristie/django-rest-framework/blob/master/rest_framework/request.py, xin vui lòng nhận thấy rằng không phải là mô hình django HttpRequest tiêu chuẩn.
Bạn có thể đặt nhiều trình phân tích cú pháp, sau đó yêu cầu sẽ chọn một trình phân tích phù hợp theo tiêu đề yêu cầu HTTP: Loại nội dung.
Điều thứ hai là bạn phải trả lại serializer.data cho khách hàng dưới dạng JSON, không phải từ điển. Đó là những gì JSONRenderer. Nó chuyển đổi dict sang JSON và được thực hiện bên trong lớp Response https://github.com/tomchristie/django-rest-framework/blob/master/rest_framework/response.py. Ngoài ra, bạn có thể đặt nhiều trình kết xuất và sau đó tùy chọn phù hợp được chọn theo tiêu đề http loại phương tiện được chấp nhận.
Ví dụ về định nghĩa viewset đầy đủ có thể là:
from snippets.models import Snippet
from snippets.serializers import SnippetSerializer
from rest_framework.renderers import JSONRenderer
from rest_framework.parsers import JSONParser
class SnippetViewSet(viewsets.ModelViewSet):
queryset = Snippet.objects.all()
serializer_class = SnippetSerializer
renderer_classes = (JSONRenderer,)
parser_classes = (JSONParser,)
serializing được chuyển đổi một đối tượng vào một chuỗi (JSON trong trường hợp của bạn) và deserializing là quá trình ngược lại. Chính xác là bạn đang hỏi cái gì? – Selcuk
yeah cùng một điều nhưng trong một cách phức tạp hơn .. Tôi biết định nghĩa bookish nhưng không có một sự hiểu biết tốt cho cùng. –