Django Rest Framework
-- 是一个强大且灵活的工具包,用以构建Web API
-- 可以在Django的基础上迅速实现API
-- 并且自身还带有WEB的测试页面,可以方便的测试自己的API
传统的基于模板引擎的 django 开发工作流:
-- 绑定 URL 和视图函数。当用户访问某个 URL 时,调用绑定的视图函数进行处理。
-- 编写视图函数的逻辑。视图中通常涉及数据库的操作。
-- 在视图中渲染 HTML 模板,返回 HTTP 响应。
基于 django-rest-framework 的 RESTful API 的开发,过程是完全类似的:
-- 绑定 URL 和视图函数。当用户访问某个 URL 时,调用绑定的视图函数进行处理。
-- 编写视图函数的逻辑,根据 HTTP 请求类型,对请求的资源进行相应操作,这个过程通常涉及数据库的操作。
-- 使用约定的资源描述格式(例如 XML 或者 JSON)序列化资源并将数据返回给客户端(通过 HTTP 响应)。
Rest Framework开发流程
serializers.py => views.py => urls.py
https://www.django-rest-framework.org/ # 创建 REST 应用,urls => setting python manage.py startapp REST # 安装 rest framework pip install djangorestframework # setting中添加 rest_framework
序列化器 - Serializer
serializers.py
# 序列化器 from django.contrib.auth.models import User, Group from rest_framework import serializers from REST.models import Book # HyperLinkedModelSerializer,超链接可视化 class UserSerializer(serializers.HyperlinkedModelSerializer): class Meta: # 模型 + 模板(序列化器) => Json # django内置的User model = User # 字段 fields = ('url', 'username', 'email', 'groups') class GroupSerializer(serializers.HyperlinkedModelSerializer): class Meta: model = Group fields = ('url', 'name') class BookSerializer(serializers.HyperlinkedModelSerializer): class Meta: model = Book fields = ('b_name', 'b_price')
视图函数
-- viewsets.ModelViewSet
-- CBV
-- 视图集合
from django.contrib.auth.models import User, Group from rest_framework import viewsets from REST.models import Book from REST.serializers import UserSerializer, GroupSerializer, BookSerializer # 类视图 User和Group 为Django自带 class UserViewSet(viewsets.ModelViewSet): # 将数据序列化,获取数据 - 选择序列化类 # 查询结果集 queryset = User.objects.all() # 序列化器选择 serializer_class = UserSerializer class GroupViewSet(viewsets.ModelViewSet): queryset = Group.objects.all() serializer_class = GroupSerializer class BookViewSet(viewsets.ModelViewSet): queryset = Book.objects.all() serializer_class = BookSerializer
根路由 urls.py
from django.contrib import admin from django.urls import path, include from rest_framework.routers import DefaultRouter from REST.views import UserViewSet, GroupViewSet, BookViewSet router = DefaultRouter() router.register(r'users', UserViewSet) router.register(r'groups', GroupViewSet) router.register(r'books', BookViewSet) urlpatterns = [ path('admin/', admin.site.urls), path('cbv/', include('App.urls', namespace='cbv')), # 需要在include中添加应用名'REST',namespace='rest'会导致重名报错 # path('rest/', include(router.urls, 'REST'), namespace='rest'), path('rest/', include(router.urls)), path('ser/', include('RESTSerializer.urls')), ]
models.py
from django.db import models # 模型写好后,在serializers中序列化,再到views,最后注册路由 class Book(models.Model): b_name = models.CharField(max_length=32) b_price = models.FloatField(default=1)
进行 runserver
-- 所有Api变成可视化
-- 超链接可视化 HyperLinkedModelSerializer
-- 对数据集合实现了整体添加获取
-- 路由 /users/, /groups/
-- get
-- post
-- 对单个实现了增删改查
-- 路由 /users/id/, /groups/id/
-- get
-- post
-- put
-- delelte
-- patch
-- viewsets做了视图函数的实现
-- router做了路由的注册