新手必备:Django REST Framework快速入门 – wiki大全

“`text
Okay, I can help you write an article about “新手必备:Django REST Framework快速入门” (Beginner’s Guide: Django REST Framework Quick Start).

Here’s the plan:
1. Structure the Article: I will outline the key sections for a comprehensive beginner’s guide to DRF.
2. Generate Content: I will write detailed content for each section, explaining concepts and providing code examples where appropriate.
3. Format as Markdown: The article will be formatted using Markdown for readability.
4. Create File: I will save the article to a new Markdown file.
“`

新手必备:Django REST Framework快速入门

引言

在现代Web开发中,构建健壮且可扩展的API至关重要。Django,作为Python领域最流行的Web框架之一,以其“开箱即用”的特性和完善的生态系统赢得了众多开发者的青睐。然而,Django本身在处理RESTful API方面提供的是基础功能。为了更高效、更优雅地构建API,Django REST Framework(DRF)应运而生。

Django REST Framework是一个强大且灵活的工具包,用于构建Web API。它建立在Django之上,极大地简化了API的开发过程,提供了认证、权限、序列化、视图集、路由器等一系列实用功能,让开发者能够专注于业务逻辑而不是繁琐的API细节。

本文将带领你从零开始,快速掌握Django REST Framework的基础知识,并构建一个简单的RESTful API。

1. 环境准备

在开始之前,请确保你的系统已安装Python和pip。我们首先创建一个新的Django项目和应用。

“`bash

创建并激活虚拟环境 (推荐)

python -m venv venv

Windows

.\venv\Scripts\activate

macOS/Linux

source venv/bin/activate

安装Django

pip install Django

创建Django项目

django-admin startproject myproject .

创建Django应用

python manage.py startapp myapp
“`

现在,编辑 myproject/settings.py,将 myapp 添加到 INSTALLED_APPS 中:

“`python

myproject/settings.py

INSTALLED_APPS = [
# … 其他应用
‘myapp’,
]
“`

2. 安装Django REST Framework

接下来,安装DRF并将其添加到你的Django项目中。

bash
pip install djangorestframework

然后,在 myproject/settings.pyINSTALLED_APPS 中添加 'rest_framework'

“`python

myproject/settings.py

INSTALLED_APPS = [
# … 其他应用
‘myapp’,
‘rest_framework’, # 添加这一行
]
“`

3. 创建第一个API

我们将创建一个简单的API,用于管理“图书”资源。

3.1 定义模型 (Model)

myapp/models.py 中定义一个 Book 模型:

“`python

myapp/models.py

from django.db import models

class Book(models.Model):
title = models.CharField(max_length=100)
author = models.CharField(max_length=100)
publication_date = models.DateField()
isbn = models.CharField(max_length=13, unique=True)

def __str__(self):
    return self.title

“`

运行数据库迁移:

bash
python manage.py makemigrations myapp
python manage.py migrate

3.2 创建序列化器 (Serializer)

序列化器是DRF的核心概念之一。它负责将复杂的QuerySet和模型实例转换为Python原生数据类型,以便于渲染为JSON、XML或其他内容类型。同时,它也负责反序列化,将接收到的数据验证后恢复成模型实例。

myapp 目录下创建 serializers.py 文件:

“`python

myapp/serializers.py

from rest_framework import serializers
from .models import Book

class BookSerializer(serializers.ModelSerializer):
class Meta:
model = Book
fields = [‘id’, ‘title’, ‘author’, ‘publication_date’, ‘isbn’]
# 或者使用 ‘all‘ 来包含所有字段
# fields = ‘all
“`

ModelSerializer 提供了一种简单的方式来自动创建与Django模型对应的序列化器。

3.3 创建视图集 (Viewset)

DRF提供了视图集(Viewsets)的概念,它将处理一个模型的所有CRUD(创建、读取、更新、删除)操作的逻辑封装在一个类中。

myapp/views.py 中创建 BookViewSet

“`python

myapp/views.py

from rest_framework import viewsets
from .models import Book
from .serializers import BookSerializer

class BookViewSet(viewsets.ModelViewSet):
queryset = Book.objects.all()
serializer_class = BookSerializer
“`

ModelViewSet 提供了 list (获取所有), retrieve (获取单个), create (创建), update (更新), partial_update (部分更新), destroy (删除) 等操作,无需编写额外代码。

3.4 定义URL路由 (URL Routing)

DRF的路由器(Routers)可以自动为视图集生成URL配置,大大简化了URL的定义。

myapp 目录下创建 urls.py 文件:

“`python

myapp/urls.py

from django.urls import path, include
from rest_framework.routers import DefaultRouter
from .views import BookViewSet

router = DefaultRouter()
router.register(r’books’, BookViewSet)

urlpatterns = [
path(”, include(router.urls)),
]
“`

最后,在项目级别的 myproject/urls.py 中包含 myapp 的URL配置:

“`python

myproject/urls.py

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

urlpatterns = [
path(‘admin/’, admin.site.urls),
path(‘api/’, include(‘myapp.urls’)), # 添加这一行
]
“`

4. 测试API

现在,你可以启动Django开发服务器并测试你的API了。

bash
python manage.py runserver

打开浏览器,访问 http://127.0.0.1:8000/api/books/。你会看到一个漂亮的可浏览API界面,这是DRF的一大特色。

你可以通过这个界面进行:

  • GET 请求:获取图书列表。
  • POST 请求:创建一本新书。
  • 访问 http://127.0.0.1:8000/api/books/1/ (假设图书ID为1):获取、更新或删除单本书籍。

你也可以使用Postman、Insomnia等工具或命令行工具(如curl)来发送请求。

示例:创建一本书 (POST请求)

http://127.0.0.1:8000/api/books/ 发送POST请求,请求体为JSON:

json
{
"title": "Django REST Framework Handbook",
"author": "John Doe",
"publication_date": "2023-01-01",
"isbn": "9781234567890"
}

5. 高级特性概览

DRF远不止于此,它还提供了许多高级功能来帮助你构建更复杂的API:

  • 认证 (Authentication):支持Session认证、Token认证、OAuth2等多种认证方式。
  • 权限 (Permissions):控制用户对API资源的访问权限(例如,只有管理员才能删除图书)。
  • 过滤 (Filtering):允许客户端通过URL参数过滤结果集。
  • 分页 (Pagination):处理大量数据时,将结果分批返回。
  • 限流 (Throttling):限制客户端在一定时间内可以发出的请求数量。
  • Parsers 和 Renderers:处理不同数据格式的请求和响应(如JSON, XML)。
  • Hyperlinked APIs:使API更具可发现性,资源之间通过超链接关联。

总结

通过本文,你已经成功地搭建了一个基于Django REST Framework的简单API。我们了解了DRF的核心组件:模型、序列化器、视图集和路由器,并实践了如何将它们结合起来构建一个可用的API。

Django REST Framework极大地提高了API开发的效率和体验,是Django开发者构建RESTful API的利器。接下来,你可以深入学习DRF的各种高级功能,结合实际项目需求,构建功能更强大、更安全的API。祝你开发愉快!

滚动至顶部