马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
x
以下是使用 Django 和 Django REST Framework (DRF) 开发 API 接口的核心步调,涵盖模子、迁移、序列化、视图、路由等关键环节:
前言
什么是DRF?
Django REST Framework(DRF) 是基于Django的一个强大且机动的工具包,用于快速构建Web API。它提供了序列化、认证、权限、分页等开箱即用的功能,极大简化了API开发流程。
一. 创建 Django 项目和应用
python3.11.1版本
- # 创建项目
- pip install django==5.2
- django-admin startproject myproject
- cd myproject
- # 创建应用
- python manage.py startapp myapi
复制代码 二. 安装依赖
创建虚拟情况
在 requirements.txt 中添加:
- django==5.2
- djangorestframework==3.16.0
- mysqlclient==2.2.7
复制代码 安装依赖:
- pip install -r requirements.txt
复制代码 三. 设置 DRF 和数据库
在 settings.py 中启用 DRF 和数据库:
- 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用户认证方式:
- ALTER USER 'myuser'@'localhost' IDENTIFIED WITH mysql_native_password BY 'mypassword';
- FLUSH PRIVILEGES;
复制代码 四. 界说数据模子
在 myapi/models.py 中创建模子:
- 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
复制代码 五. 创建并应用数据库迁移
- # 生成迁移文件
- python manage.py makemigrations
- # 应用迁移
- python manage.py migrate
复制代码 六. 创建序列化器
在 myapi/serializers.py 中界说序列化器:
- from rest_framework import serializers
- from .models import Book
- class BookSerializer(serializers.ModelSerializer):
- class Meta:
- model = Book
- fields = '__all__' # 序列化所有字段
复制代码 七. 编写视图
在 myapi/views.py 中使用 DRF 的视图类:
- 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 中界说路由:
- 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 中包罗应用路由:
- from django.urls import include, path
- urlpatterns = [
- path('admin/', admin.site.urls),
- path('api/', include('myapi.urls')),
- ]
复制代码 九. 测试 API
- # 启动开发服务器
- python manage.py runserver
复制代码 访问以下端点测试:
- http://localhost:8000/api/books/:获取所有书籍或创建新书籍(POST)。
- http://localhost:8000/api/books/1/:操作单个书籍(GET/PUT/DELETE)
复制代码 十. 使用视图集和路由器(简化代码)
若需进一步简化,可使用 ViewSet 和 Router:
- # 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,并机动扩展功能(如分页、过滤、文档天生)
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |