使用Django REST Framework快速开发API接口

以下是使用 Django 和 Django REST Framework (DRF) 开发 API 接口的核心步骤,涵盖模型、迁移、序列化、视图、路由等关键环节:

前言

什么是DRF?

Django REST Framework(DRF) 是基于Django的一个强大且灵活的工具包,用于快速构建Web API。它提供了序列化、认证、权限、分页等开箱即用的功能,极大简化了API开发流程。

一. 创建 Django 项目和应用

python3.11.1版本

bash 复制代码
# 创建项目
pip install django==5.2
django-admin startproject myproject
cd myproject

# 创建应用
python manage.py startapp myapi

二. 安装依赖

创建虚拟环境

复制代码
python -m venv venv

在 requirements.txt 中添加:

text 复制代码
django==5.2
djangorestframework==3.16.0
mysqlclient==2.2.7

安装依赖:

bash 复制代码
pip install -r requirements.txt

三. 配置 DRF 和数据库

settings.py 中启用 DRF 和数据库:

python 复制代码
INSTALLED_APPS = [
    ...
    'rest_framework',
    'myapi',
]

# 数据库配置(默认 SQLite)
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': BASE_DIR / 'db.sqlite3',
    },
    #'default': {
    #    'ENGINE': 'django.db.backends.mysql',
    #    'NAME': 'mydb',         # 数据库名称
    #    'USER': 'myuser',        # MySQL用户名
    #    'PASSWORD': 'mypassword',# MySQL密码
    #    'HOST': 'localhost',     # 数据库主机地址(默认为localhost)
    #    'PORT': '3306',          # 数据库端口(默认3306)
    #    'OPTIONS': {
    #        'charset': 'utf8mb4',  # 确保字符集正确
    #        'init_command': "SET sql_mode='STRICT_TRANS_TABLES'", # 启用严格模式
    #       # 如果使用MySQL 8.0+且遇到认证问题,可能需要以下选项
    #       # 'auth_plugin': 'mysql_native_password',
    #   },
    #}
}

解决MySQL 8.0+认证问题(如需要)

如果遇到caching_sha2_password错误,修改MySQL用户认证方式:

sql 复制代码
ALTER USER 'myuser'@'localhost' IDENTIFIED WITH mysql_native_password BY 'mypassword';
FLUSH PRIVILEGES;

四. 定义数据模型

在 myapi/models.py 中创建模型:

python 复制代码
from django.db import models

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

    def __str__(self):
        return self.title

五. 创建并应用数据库迁移

bash 复制代码
# 生成迁移文件
python manage.py makemigrations

# 应用迁移
python manage.py migrate

六. 创建序列化器

在 myapi/serializers.py 中定义序列化器:

python 复制代码
from rest_framework import serializers
from .models import Book

class BookSerializer(serializers.ModelSerializer):
    class Meta:
        model = Book
        fields = '__all__'  # 序列化所有字段

七. 编写视图

在 myapi/views.py 中使用 DRF 的视图类:

python 复制代码
from rest_framework import generics
from .models import Book
from .serializers import BookSerializer

# 列表和创建操作
class BookListCreateView(generics.ListCreateAPIView):
    queryset = Book.objects.all()
    serializer_class = BookSerializer

# 单个对象的获取、更新、删除
class BookDetailView(generics.RetrieveUpdateDestroyAPIView):
    queryset = Book.objects.all()
    serializer_class = BookSerializer

八. 配置 URL 路由

在 myapi/urls.py 中定义路由:

python 复制代码
from django.urls import path
from .views import BookListCreateView, BookDetailView

urlpatterns = [
    path('books/', BookListCreateView.as_view(), name='book-list'),
    path('books/<int:pk>/', BookDetailView.as_view(), name='book-detail'),
]

在主项目的 urls.py 中包含应用路由:

python 复制代码
from django.urls import include, path

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

九. 测试 API

bash 复制代码
# 启动开发服务器
python manage.py runserver

访问以下端点测试:

复制代码
http://localhost:8000/api/books/:获取所有书籍或创建新书籍(POST)。

http://localhost:8000/api/books/1/:操作单个书籍(GET/PUT/DELETE)

十. 使用视图集和路由器(简化代码)

若需进一步简化,可使用 ViewSet 和 Router:

python 复制代码
# 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

# urls.py
from rest_framework.routers import DefaultRouter
from .views import BookViewSet

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

urlpatterns = [
    path('', include(router.urls)),
]

关键步骤总结

复制代码
1.模型定义:通过 Django 模型定义数据结构。

2.迁移操作:使用 makemigrations 和 migrate 同步数据库。

3.序列化器:DRF 的 ModelSerializer 将模型转换为 JSON。

4.视图类:

    通用视图(ListCreateAPIView, RetrieveUpdateDestroyAPIView):快速实现 CRUD。

    视图集(ModelViewSet):结合路由器自动生成 URL。

5.路由配置:手动定义或使用 DefaultRouter 自动生成。

6.权限控制:按需添加认证和权限类。

常用命令速查

操作 命令
创建迁移文件 python manage.py makemigrations
应用迁移 python manage.py migrate
创建超级用户 python manage.py createsuperuser
启动开发服务器 python manage.py runserver

通过以上步骤,你可以快速构建一个符合 RESTful 规范的 API,并灵活扩展功能(如分页、过滤、文档生成)

相关推荐
小大宇33 分钟前
Python 集成 Conda
开发语言·python·conda
初学者,亦行者1 小时前
利用Pyecharts绘制堆叠柱状图
python·信息可视化·数据分析
林泽毅1 小时前
PyTRIO:当强化学习不再需要本地GPU
人工智能·python·深度学习·机器学习
小陈phd1 小时前
QAnything 阅读优化策略05——检索
人工智能·python·机器学习
ruofu331 小时前
wsl端是py312,但是项目是py311, 如何下载py311的依赖包(wheels)
python·docker
小大宇2 小时前
python flask框架 SSE流式返回、跨域、报错
开发语言·python·flask
像风一样的男人@2 小时前
python --fastapi推流AI推理
人工智能·python·fastapi
2601_956319882 小时前
最新量化开发卡住,先查规则和流程是否完整
人工智能·python
小小代码狗3 小时前
SQLi-Labs 基础注入实战教程(Less-1 ~ Less-5and Less-9)
服务器·python·php