文章目录
- RF简介
- RESTful API简介
- Vue简介
- RESTFul API 接口需求及设计
- 4. DRF编程实现RESTful 接口
- CBV 视图类实现代码
RF简介
DRF(Django REST framework)
是基于Django
框架的一个强大的Web API
开发工具。DRF
提供了一组工具和库,使得开发者可以轻松地构建和管理RESTful
风格的Web API
。
DRF
的主要特点包括:
-
快速开发:
DRF
提供了一些简化开发过程的功能,比如自动路由、序列化和反序列化、视图集等,可以大大加快Web API
的开发速度。 -
强大的认证和授权功能:
DRF
支持多种认证方式,包括基于Token、JWT(JSON Web Token)、OAuth2
等,同时也提供了灵活的授权策略,可以根据需求进行定制。 -
可定制性强:
DRF
提供了一系列的扩展和插件机制,允许开发者根据自己的需求进行定制和扩展。 -
良好的文档和测试支持:
DRF
提供了丰富的文档和测试工具,可以方便地生成API
文档和进行API
测试。
总之,DRF
是一个功能强大、易用、可定制的Web API
开发框架,它在开发RESTful
风格的Web API
时能够提供很多便利和帮助。
RESTful API简介
REST(Representational State Transfer)
是一种基于网络的软件架构风格,用于构建分布式系统。RESTFUL(RESTful Web services)
是一种实施REST
架构风格的Web
服务。
RESTFUL
设计原则强调系统组件之间的互操作性和可扩展性,以及使用统一资源标识符(URI
)作为每个资源的唯一标识。RESTFUL Web
服务使用HTTP
协议的GET
,POST,PUT
和DELETE
方法来操作和传输数据。这些方法对应于对资源的查找,创建,更新和删除操作。
RESTFUL
架构还遵循无状态约束,即服务器不会在不同的请求之间保存客户端的状态信息。客户端通过在请求中包含所有必要的信息来进行身份验证和授权。
RESTFUL
架构的优点包括易于理解和使用,对可扩展性和互操作性的支持,以及与其他Web
服务和系统的集成能力。它已成为构建现代分布式系统的常用架构风格。
Vue简介
Vue
是一种用于构建用户界面的JavaScript
框架。它是一款轻量级、灵活且易于学习的框架,被广泛应用于Web
开发中。
Vue
的设计目标是通过尽可能简单的API
来实现响应式的数据绑定和组件化的开发。它的核心库只关注视图层,可以与其他库或现有项目整合,也可以作为一个完整的前端开发框架使用。
Vue
具有高效的虚拟DOM
和渲染性能,并且具有丰富的生态系统和活跃的社区支持。通过使用Vue
,开发者可以快速构建交互式的用户界面,提高开发效率和用户体验。
RESTFul API 接口需求及设计
本文以学生信息查询功能为例,采用前后端分离架构,要求后端提供RESTFul
接口。
-
本例要求提供如下查询功能:
列表查询、单条查询
添加学生信息
更改学生信息
删除学生信息 -
创建django 项目与应用
新建1个项目
django-admin startproject RestTutorial
在RestTutorial
项目下,新建1个app
cd RestTutorial
python manage.py startapp student_rest
- 修改全局配置
打开RestTutorial/RestTutorial/settings.py
文件,添加以下配置
INSTALLED_APPS = [...'rest_framework', # 导入DRF库‘student_rest’, # 导入新建app
]# 设置分页器
REST_FRAMEWORK = {'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.PageNumberPagination','PAGE_SIZE': 10
}
将语言与时区修改为中国的
LANGUAGE_CODE = 'zh-hans'
TIME_ZONE = 'Asia/Shanghai'
USE_I18N = True
USE_TZ = False
- 准备
model
django
默认使用sqlite3
数据库
模型定义好以后,需要更新数据库。
python manage.py makemigrations
python manage.py migrate
PS E:\coding\Django_learn\RestTutorial> python manage.py makemigrations
System check identified some issues:WARNINGS:
student_rest.Student.gender: (fields.W122) 'max_length' is ignored when used with IntegerField.HINT: Remove 'max_length' from field
Migrations for 'student_rest':student_rest\migrations\0001_initial.py+ Create model Student
PS E:\coding\Django_learn\RestTutorial> python manage.py migrate
System check identified some issues:WARNINGS:
student_rest.Student.gender: (fields.W122) 'max_length' is ignored when used with IntegerField.HINT: Remove 'max_length' from field
Operations to perform:Apply all migrations: admin, auth, contenttypes, sessions, student_rest
Running migrations:Applying contenttypes.0001_initial... OKApplying auth.0001_initial... OKApplying admin.0001_initial... OKApplying admin.0002_logentry_remove_auto_add... OKApplying admin.0003_logentry_add_action_flag_choices... OKApplying contenttypes.0002_remove_content_type_name... OKApplying auth.0002_alter_permission_name_max_length... OKApplying auth.0003_alter_user_email_max_length... OKApplying auth.0004_alter_user_username_opts... OKApplying auth.0005_alter_user_last_login_null... OKApplying auth.0006_require_contenttypes_0002... OKApplying auth.0007_alter_validators_add_error_messages... OKApplying auth.0008_alter_user_username_max_length... OKApplying auth.0009_alter_user_last_name_max_length... OKApplying auth.0010_alter_group_name_max_length... OKApplying auth.0011_update_proxy_permissions... OKApplying auth.0012_alter_user_first_name_max_length... OKApplying sessions.0001_initial... OKApplying student_rest.0001_initial... OK
- 将
Student
模型加入到管理后台
为了添加数据方便,可以将新建的model
添加到django
管理后台,添加初始数据更加方便
打开 RestTutorial/student_rest/admins.py
文件,添加如下代码
- 启动项目,添加初始数据
创建1个管理员帐号,并启动项目:
python manage.py createsuperuser
python manage.py runserver
通过admin
后台添加数据
4. DRF编程实现RESTful 接口
DRF
编程很关键的一步是定义Serializer
类,用于将 model
数据序列化。其使用方式与django Form
表单非常相似。
DRF
视图可采用函数式编程,或Class Based View(CBV)
视图类的方式编程,并且DRF
内置了各种通用视图类来简化编程。
-
自定义
Serializer
类
新建文件:tutorial/student_rest/serializers.py
, 输入以下代码 -
用函数式编程实现视图功能
DRF
对视图编程,提供了@api_view()
装饰器来实现函数式编程,通常响应仅提供Json
字节串,不提供DRF
特有的接口测试页面功能。
打开RestTutorial/student_rest/views.py
文件,输出以下代码
CBV 视图类实现代码
下面我们新建1个文件 RestTutorial/student_rest/views_cbv.py
, 输入以下代码
from django.shortcuts import render
from django.http import HttpResponse
from django.views.decorators.csrf import csrf_exempt
from .models import Student
from .serializers import StudentSerializer
from rest_framework import generics
from rest_framework.permissions import IsAdminUserclass StudentList(generics.ListCreateAPIView):queryset = Student.objects.all()serializer_class = StudentSerializerclass StudentDetail(generics.RetrieveUpdateDestroyAPIView):queryset = Student.objects.all()serializer_class = StudentSerializer
非常简洁地就实现了第4章的全部功能。 下面为新的视图类添加路由;
打开 tutorial/student_rest/urls.py
, 添加
path("v2/", views_cbv.StudentList.as_view()), # 用于Class-based View测试, list, createpath("v2/<int:pk>/", views_cbv.StudentDetail.as_view()), # 用于Class-based View测试, retrieve, update, delete