📌  相关文章
📜  hpw 在 django rest 框架逻辑中创建相关模型 - Python (1)

📅  最后修改于: 2023-12-03 15:15:32.618000             🧑  作者: Mango

在 Django Rest 框架逻辑中创建相关模型

在 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 模型。它包括 titleauthorpublished_datedescription四个字段,它们的类型分别为 CharFieldDateFieldTextField。这些字段都是可选的,但是至少需要定义一个字段。在 Django Rest 框架中,你可以使用许多类型定义你的模型字段,如 IntegerFieldBooleanFieldDecimalField 等。

数据迁移

创建模型后,你需要执行数据迁移以将模型定义应用到数据库中。执行以下命令创建数据迁移:

python manage.py makemigrations

这将为模型创建一个数据迁移文件,并在迁移目录中创建一个 Python 文件。执行以下命令将生成的迁移应用于数据库中:

python manage.py migrate

这将在数据库中创建一个名为 book 的表,其中包含 Book 模型中定义的所有字段。

REST API 视图

现在,你已经成功地创建了一个模型,下一步是使用 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,并指定要序列化的模型为 Bookfields 属性定义了要序列化的字段,__all__ 表示将包括所有字段。

接下来,创建一个 BookAPIView 类,其中包含定义 API 视图的 GET、POST、PUT 和 DELETE 方法。这些方法将使用 BookSerializerBook 模型来操作数据库中的数据。

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/。现在你可以浏览、创建、更新和删除图书数据。