使用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,并灵活扩展功能(如分页、过滤、文档生成)

相关推荐
ahead~24 分钟前
【大模型入门】访问GPT_API实战案例
人工智能·python·gpt·大语言模型llm
大模型真好玩1 小时前
准确率飙升!GraphRAG如何利用知识图谱提升RAG答案质量(额外篇)——大规模文本数据下GraphRAG实战
人工智能·python·mcp
19891 小时前
【零基础学AI】第30讲:生成对抗网络(GAN)实战 - 手写数字生成
人工智能·python·深度学习·神经网络·机器学习·生成对抗网络·近邻算法
applebomb1 小时前
没合适的组合wheel包,就自行编译flash_attn吧
python·ubuntu·attention·flash
Chasing__Dreams2 小时前
python--杂识--18.1--pandas数据插入sqlite并进行查询
python·sqlite·pandas
彭泽布衣3 小时前
python2.7/lib-dynload/_ssl.so: undefined symbol: sk_pop_free
python·sk_pop_free
喜欢吃豆3 小时前
从零构建MCP服务器:FastMCP实战指南
运维·服务器·人工智能·python·大模型·mcp
一个处女座的测试3 小时前
Python语言+pytest框架+allure报告+log日志+yaml文件+mysql断言实现接口自动化框架
python·mysql·pytest
nananaij4 小时前
【Python基础入门 re模块实现正则表达式操作】
开发语言·python·正则表达式
蛋仔聊测试4 小时前
Playwright 网络流量监控与修改指南
python