📅  最后修改于: 2023-12-03 15:15:32.618000             🧑  作者: Mango
在 Django Rest 框架中,模型是对应数据库中表的 Python 类。模型定义了表中所有的字段和方法,Django Rest 框架利用这些模型来操作数据库中的数据。本文将介绍如何在 Django Rest 框架中创建相关模型。
要在 Django Rest 框架中创建模型,你需要定义一个继承 django.db.models.Model
的 Python 类。这个类的每个属性都是相应的数据库表中的字段。
from django.db import models
class Book(models.Model):
title = models.CharField(max_length=100)
author = models.CharField(max_length=100)
published_date = models.DateField()
description = models.TextField()
上面的代码定义了一个 Book
模型。它包括 title
、author
、published_date
和description
四个字段,它们的类型分别为 CharField
、DateField
和 TextField
。这些字段都是可选的,但是至少需要定义一个字段。在 Django Rest 框架中,你可以使用许多类型定义你的模型字段,如 IntegerField
、BooleanField
、DecimalField
等。
创建模型后,你需要执行数据迁移以将模型定义应用到数据库中。执行以下命令创建数据迁移:
python manage.py makemigrations
这将为模型创建一个数据迁移文件,并在迁移目录中创建一个 Python 文件。执行以下命令将生成的迁移应用于数据库中:
python manage.py migrate
这将在数据库中创建一个名为 book
的表,其中包含 Book
模型中定义的所有字段。
现在,你已经成功地创建了一个模型,下一步是使用 Django Rest 框架创建 REST API 视图,以使用模型操作数据库中的数据。Django Rest 框架使用视图和序列化器实现 REST API。
先定义一个 BookSerializer
类,用来将模型的实例序列化为 JSON 数据,或从 JSON 数据反序列化。
from rest_framework import serializers
from .models import Book
class BookSerializer(serializers.ModelSerializer):
class Meta:
model = Book
fields = '__all__'
在上面的代码中,BookSerializer
继承 serializers.ModelSerializer
,并指定要序列化的模型为 Book
。fields
属性定义了要序列化的字段,__all__
表示将包括所有字段。
接下来,创建一个 BookAPIView
类,其中包含定义 API 视图的 GET、POST、PUT 和 DELETE 方法。这些方法将使用 BookSerializer
和 Book
模型来操作数据库中的数据。
from rest_framework.views import APIView
from rest_framework.response import Response
from rest_framework import status
from .models import Book
from .serializers import BookSerializer
class BookAPIView(APIView):
def get(self, request):
books = Book.objects.all()
serializer = BookSerializer(books, many=True)
return Response(serializer.data)
def post(self, request):
serializer = BookSerializer(data=request.data)
if serializer.is_valid():
serializer.save()
return Response(serializer.data)
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
def put(self, request, pk):
book = Book.objects.get(pk=pk)
serializer = BookSerializer(book, data=request.data)
if serializer.is_valid():
serializer.save()
return Response(serializer.data)
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
def delete(self, request, pk):
book = Book.objects.get(pk=pk)
book.delete()
return Response(status=status.HTTP_204_NO_CONTENT)
在上面的代码中,BookAPIView
继承 APIView
,重载了 HTTP 请求方法,比如 get()
、post()
、put()
和 delete()
等。因为 APIView
类实现了所有 HTTP 请求方法,所以你可以覆盖你想要实现的方法。
get()
方法使用 Book
模型来获取所有图书,并使用 BookSerializer
将结果序列化为 JSON 数据。post()
方法使用 BookSerializer
将传递的数据反序列化为 Book
模型的实例,并将其保存到数据库中。put()
方法类似于 post()
方法,但是使用传递的 ID 更新现有的 Book
实例。delete()
方法通过 ID 查找并删除给定的 Book
实例。
现在你已经创建了模型和 REST API 视图,你可以执行以下命令启动服务器并测试 API:
python manage.py runserver
打开浏览器,访问 http://localhost:8000/books/。现在你可以浏览、创建、更新和删除图书数据。