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

相关推荐
啾啾Fun19 分钟前
Python类型处理与推导式
开发语言·windows·python
蜗牛的旷野19 分钟前
华为OD机试_2025 B卷_磁盘容量排序(Python,100分)(附详细解题思路)
python·算法·华为od
xiaoming001823 分钟前
Django中使用流式响应,自己也能实现ChatGPT的效果
后端·python·chatgpt·django
北京_宏哥28 分钟前
🔥Python零基础从入门到精通详细教程5-数据类型的转换- 中篇
前端·python·面试
一个java开发31 分钟前
开源免费ETL工具==PYTHON实现
python·开源·etl
liulun38 分钟前
SQLite官方数据库加密方案
数据库·sqlite
Python技术极客43 分钟前
一文掌握 Python datetime 模块:从入门到精通的进阶之路
python
猿助码头qq3526746981 小时前
django基于Spark的国漫推荐系统
ajax·spark·django
Bug改不动了1 小时前
LangGraph基础知识(MemorySaver/SqliteSaver )(三)
python·langgraph
这里有鱼汤2 小时前
Python初学者常犯的错误汇总,建议收藏
后端·python