IT评测·应用市场-qidao123.com技术社区

标题: 使用Django REST Framework快速开发API接口 [打印本页]

作者: 圆咕噜咕噜    时间: 前天 07:06
标题: 使用Django REST Framework快速开发API接口
以下是使用 Django 和 Django REST Framework (DRF) 开发 API 接口的核心步调,涵盖模子、迁移、序列化、视图、路由等关键环节:
前言

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

python3.11.1版本
  1. # 创建项目
  2. pip install django==5.2
  3. django-admin startproject myproject
  4. cd myproject
  5. # 创建应用
  6. python manage.py startapp myapi
复制代码
二. 安装依赖

创建虚拟情况
  1. python -m venv venv
复制代码
在 requirements.txt 中添加:
  1. django==5.2
  2. djangorestframework==3.16.0
  3. mysqlclient==2.2.7
复制代码
安装依赖:
  1. pip install -r requirements.txt
复制代码
三. 设置 DRF 和数据库

在 settings.py 中启用 DRF 和数据库:
  1. INSTALLED_APPS = [
  2.     ...
  3.     'rest_framework',
  4.     'myapi',
  5. ]
  6. # 数据库配置(默认 SQLite)
  7. DATABASES = {
  8.     'default': {
  9.         'ENGINE': 'django.db.backends.sqlite3',
  10.         'NAME': BASE_DIR / 'db.sqlite3',
  11.     },
  12.     #'default': {
  13.     #    'ENGINE': 'django.db.backends.mysql',
  14.     #    'NAME': 'mydb',         # 数据库名称
  15.     #    'USER': 'myuser',        # MySQL用户名
  16.     #    'PASSWORD': 'mypassword',# MySQL密码
  17.     #    'HOST': 'localhost',     # 数据库主机地址(默认为localhost)
  18.     #    'PORT': '3306',          # 数据库端口(默认3306)
  19.     #    'OPTIONS': {
  20.     #        'charset': 'utf8mb4',  # 确保字符集正确
  21.     #        'init_command': "SET sql_mode='STRICT_TRANS_TABLES'", # 启用严格模式
  22.     #       # 如果使用MySQL 8.0+且遇到认证问题,可能需要以下选项
  23.     #       # 'auth_plugin': 'mysql_native_password',
  24.     #   },
  25.     #}
  26. }
复制代码
办理MySQL 8.0+认证问题(如需要)

如果遇到caching_sha2_password错误,修改MySQL用户认证方式:
  1. ALTER USER 'myuser'@'localhost' IDENTIFIED WITH mysql_native_password BY 'mypassword';
  2. FLUSH PRIVILEGES;
复制代码
四. 界说数据模子

在 myapi/models.py 中创建模子:
  1. from django.db import models
  2. class Book(models.Model):
  3.     title = models.CharField(max_length=200)
  4.     author = models.CharField(max_length=100)
  5.     published_date = models.DateField()
  6.     def __str__(self):
  7.         return self.title
复制代码
五. 创建并应用数据库迁移

  1. # 生成迁移文件
  2. python manage.py makemigrations
  3. # 应用迁移
  4. python manage.py migrate
复制代码
六. 创建序列化器

在 myapi/serializers.py 中界说序列化器:
  1. from rest_framework import serializers
  2. from .models import Book
  3. class BookSerializer(serializers.ModelSerializer):
  4.     class Meta:
  5.         model = Book
  6.         fields = '__all__'  # 序列化所有字段
复制代码
七. 编写视图

在 myapi/views.py 中使用 DRF 的视图类:
  1. from rest_framework import generics
  2. from .models import Book
  3. from .serializers import BookSerializer
  4. # 列表和创建操作
  5. class BookListCreateView(generics.ListCreateAPIView):
  6.     queryset = Book.objects.all()
  7.     serializer_class = BookSerializer
  8. # 单个对象的获取、更新、删除
  9. class BookDetailView(generics.RetrieveUpdateDestroyAPIView):
  10.     queryset = Book.objects.all()
  11.     serializer_class = BookSerializer
复制代码
八. 设置 URL 路由

在 myapi/urls.py 中界说路由:
  1. from django.urls import path
  2. from .views import BookListCreateView, BookDetailView
  3. urlpatterns = [
  4.     path('books/', BookListCreateView.as_view(), name='book-list'),
  5.     path('books/<int:pk>/', BookDetailView.as_view(), name='book-detail'),
  6. ]
复制代码
在主项目的 urls.py 中包罗应用路由:
  1. from django.urls import include, path
  2. urlpatterns = [
  3.     path('admin/', admin.site.urls),
  4.     path('api/', include('myapi.urls')),
  5. ]
复制代码
九. 测试 API

  1. # 启动开发服务器
  2. python manage.py runserver
复制代码
访问以下端点测试:
  1. http://localhost:8000/api/books/:获取所有书籍或创建新书籍(POST)。
  2. http://localhost:8000/api/books/1/:操作单个书籍(GET/PUT/DELETE)
复制代码
十. 使用视图集和路由器(简化代码)

若需进一步简化,可使用 ViewSet 和 Router:
  1. # views.py
  2. from rest_framework import viewsets
  3. from .models import Book
  4. from .serializers import BookSerializer
  5. class BookViewSet(viewsets.ModelViewSet):
  6.     queryset = Book.objects.all()
  7.     serializer_class = BookSerializer
  8. # urls.py
  9. from rest_framework.routers import DefaultRouter
  10. from .views import BookViewSet
  11. router = DefaultRouter()
  12. router.register(r'books', BookViewSet)
  13. urlpatterns = [
  14.     path('', include(router.urls)),
  15. ]
复制代码
关键步调总结

  1. 1.模型定义:通过 Django 模型定义数据结构。
  2. 2.迁移操作:使用 makemigrations 和 migrate 同步数据库。
  3. 3.序列化器:DRF 的 ModelSerializer 将模型转换为 JSON。
  4. 4.视图类:
  5.     通用视图(ListCreateAPIView, RetrieveUpdateDestroyAPIView):快速实现 CRUD。
  6.     视图集(ModelViewSet):结合路由器自动生成 URL。
  7. 5.路由配置:手动定义或使用 DefaultRouter 自动生成。
  8. 6.权限控制:按需添加认证和权限类。
复制代码
常用命令速查

操作命令创建迁移文件python manage.py makemigrations应用迁移python manage.py migrate创建超级用户python manage.py createsuperuser启动开发服务器python manage.py runserver 通过以上步调,你可以快速构建一个符合 RESTful 规范的 API,并机动扩展功能(如分页、过滤、文档天生)

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 IT评测·应用市场-qidao123.com技术社区 (https://dis.qidao123.com/) Powered by Discuz! X3.4