📜  Django REST API – 带有 DRF 的 CRUD(1)

📅  最后修改于: 2023-12-03 14:40:46.551000             🧑  作者: Mango

Django REST API – 带有 DRF 的 CRUD

介绍

Django 是使用 Python 编程语言开发的 Web 框架。它提供一整套开发 Web 应用程序所需的组件和工具,包括 URL 解析器、模板语言、表单处理、数据库 ORM、会话管理等。Django 还内置了一个轻量的 Web 服务器,支持 WSGI 协议,可以快速启动和测试应用程序。

Django REST framework (DRF) 是 Django 开发的一个功能强大且灵活的工具包,它可以帮助开发人员轻松构建和部署 Web API。DRF 提供了一系列功能,例如序列化、认证、权限、限流、视图、渲染等,还支持多种数据格式,如 JSON、XML、YAML 等。

本文将介绍如何使用 Django 和 DRF 构建一个基础的 CRUD(增删改查)应用程序,以了解其主要功能和用法。

环境设置

在开始编写应用程序之前,您需要安装并设置好以下组件:

  • Python 3.6+
  • Django 3.0+
  • Django REST framework 3.11+

您可以通过 pip 工具安装这些组件:

$ pip install Django
$ pip install djangorestframework

相关文档:

创建项目和应用程序

在安装好 Django 和 DRF 后,可以使用以下命令创建新的 Django 项目和应用程序:

$ django-admin startproject myproject
$ cd myproject
$ python manage.py startapp myapp

myproject 是项目名称,myapp 是应用程序名称。

配置数据库和模型

settings.py 中配置数据库和应用程序:

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'rest_framework',
    'myapp',
]

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': BASE_DIR / 'db.sqlite3',
    }
}

然后在应用程序目录的 models.py 中定义数据模型:

from django.db import models

class Book(models.Model):
    title = models.CharField(max_length=100)
    author = models.CharField(max_length=100)
    description = models.TextField()
    published_date = models.DateField()

    def __str__(self):
        return self.title

运行以下命令创建数据库和数据表:

$ python manage.py makemigrations
$ python manage.py migrate
创建序列化器和视图

在应用程序目录的 serializers.py 中创建序列化器:

from rest_framework import serializers
from myapp.models import Book

class BookSerializer(serializers.ModelSerializer):
    class Meta:
        model = Book
        fields = '__all__'

这里我们使用 ModelSerializer 类,它自动根据模型定义创建序列化器。也可以手动定义字段。

在应用程序目录的 views.py 中创建视图:

from rest_framework import generics
from myapp.models import Book
from myapp.serializers import BookSerializer

class BookList(generics.ListCreateAPIView):
    queryset = Book.objects.all()
    serializer_class = BookSerializer

class BookDetail(generics.RetrieveUpdateDestroyAPIView):
    queryset = Book.objects.all()
    serializer_class = BookSerializer

BookList 视图处理 GET 和 POST 请求,返回所有图书列表和创建新书,BookDetail 视图处理 GET、PUT、PATCH 和 DELETE 请求,返回特定书的详细信息、更新和删除。

运行 python manage.py runserver 可以测试视图。

创建 URL 模式

在应用程序目录的 urls.py 中添加 URL 模式:

from django.urls import path
from myapp.views import BookList, BookDetail

urlpatterns = [
    path('books/', BookList.as_view(), name='book_list'),
    path('books/<int:pk>/', BookDetail.as_view(), name='book_detail'),
]

path() 函数将 URL 模式映射到相关视图。

在项目目录的 urls.py 中导入应用程序的 URL 模式:

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

urlpatterns = [
    path('admin/', admin.site.urls),
    path('api/', include('myapp.urls')),
]

include() 函数允许将应用程序 URL 模式包含在主项目 URL 模式中。

现在可以通过 http://localhost:8000/api/books/http://localhost:8000/api/books/<id> 访问 RESTful API 了。

测试 API

可以使用 curl 命令和 REST 客户端(例如 Postman)测试 API:

# GET 请求,获取所有书籍列表
$ curl http://localhost:8000/api/books/
[{"id":1,"title":"Django for beginners","author":"William S. Vincent","description":"The best book for Django beginners.","published_date":"2020-01-01T00:00:00Z"}]

# POST 请求,创建一本新书
$ curl -X POST -H "Content-Type: application/json" -d '{"title": "Django for advanced","author": "John Smith","description": "The best book for Django advanced programmers.","published_date": "2020-06-01"}' http://localhost:8000/api/books/
{"id":2,"title":"Django for advanced","author":"John Smith","description":"The best book for Django advanced programmers.","published_date":"2020-06-01T00:00:00Z"}

# GET 请求,获取指定 ID 的书籍信息
$ curl http://localhost:8000/api/books/1/
{"id":1,"title":"Django for beginners","author":"William S. Vincent","description":"The best book for Django beginners.","published_date":"2020-01-01T00:00:00Z"}

# PUT 请求,更新指定 ID 的书籍信息
$ curl -X PUT -H "Content-Type: application/json" -d '{"title": "Django for intermediate","author": "John Chen","description": "The best book for Django intermediate programmers.","published_date": "2020-06-01"}' http://localhost:8000/api/books/2/
{"id":2,"title":"Django for intermediate","author":"John Chen","description":"The best book for Django intermediate programmers.","published_date":"2020-06-01T00:00:00Z"}

# DELETE 请求,删除指定 ID 的书籍信息
$ curl -X DELETE http://localhost:8000/api/books/2/
总结

在本文中,我们介绍了如何使用 Django 和 DRF 创建基本的 CRUD 应用程序。我们创建了数据模型、序列化器和视图,配置了数据库和 URL 模式,并使用 curl 命令和 REST 客户端测试了 RESTful API。Django 和 DRF 提供了许多功能和工具,可以帮助开发人员快速构建高质量的 Web 应用程序和 API。