DRF(Django-Rest-Framework快速实现 RESTful API 接口编程)+Vue.JS前后端分离项目

文章目录

        • RF简介
        • [RESTful API简介](#RESTful API简介)
        • Vue简介
        • [RESTFul API 接口需求及设计](#RESTFul API 接口需求及设计)
        • [4. DRF编程实现RESTful 接口](#4. DRF编程实现RESTful 接口)
        • [CBV 视图类实现代码](#CBV 视图类实现代码)
RF简介

DRF(Django REST framework)是基于Django框架的一个强大的Web API开发工具。DRF提供了一组工具和库,使得开发者可以轻松地构建和管理RESTful风格的Web API

DRF的主要特点包括:

  1. 快速开发:DRF提供了一些简化开发过程的功能,比如自动路由、序列化和反序列化、视图集等,可以大大加快Web API的开发速度。

  2. 强大的认证和授权功能:DRF支持多种认证方式,包括基于Token、JWT(JSON Web Token)、OAuth2等,同时也提供了灵活的授权策略,可以根据需求进行定制。

  3. 可定制性强:DRF提供了一系列的扩展和插件机制,允许开发者根据自己的需求进行定制和扩展。

  4. 良好的文档和测试支持: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协议的GETPOST,PUTDELETE方法来操作和传输数据。这些方法对应于对资源的查找,创建,更新和删除操作。

RESTFUL架构还遵循无状态约束,即服务器不会在不同的请求之间保存客户端的状态信息。客户端通过在请求中包含所有必要的信息来进行身份验证和授权。

RESTFUL架构的优点包括易于理解和使用,对可扩展性和互操作性的支持,以及与其他Web服务和系统的集成能力。它已成为构建现代分布式系统的常用架构风格。

Vue简介

Vue是一种用于构建用户界面的JavaScript框架。它是一款轻量级、灵活且易于学习的框架,被广泛应用于Web开发中。

Vue的设计目标是通过尽可能简单的API来实现响应式的数据绑定和组件化的开发。它的核心库只关注视图层,可以与其他库或现有项目整合,也可以作为一个完整的前端开发框架使用。

Vue具有高效的虚拟DOM和渲染性能,并且具有丰富的生态系统和活跃的社区支持。通过使用Vue,开发者可以快速构建交互式的用户界面,提高开发效率和用户体验。

RESTFul API 接口需求及设计

本文以学生信息查询功能为例,采用前后端分离架构,要求后端提供RESTFul 接口。

  1. 本例要求提供如下查询功能:

    列表查询、单条查询

    添加学生信息

    更改学生信息

    删除学生信息

  2. 创建django 项目与应用

新建1个项目

python 复制代码
django-admin startproject RestTutorial

RestTutorial 项目下,新建1个app

python 复制代码
cd RestTutorial
python manage.py startapp student_rest
  1. 修改全局配置
    打开RestTutorial/RestTutorial/settings.py 文件,添加以下配置
python 复制代码
INSTALLED_APPS = [
    ...
    'rest_framework',   # 导入DRF库
    'student_rest',    # 导入新建app
]

# 设置分页器
REST_FRAMEWORK = {
    'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.PageNumberPagination',
    'PAGE_SIZE': 10
}

将语言与时区修改为中国的

python 复制代码
LANGUAGE_CODE = 'zh-hans'
TIME_ZONE = 'Asia/Shanghai'
USE_I18N = True
USE_TZ = False
  1. 准备model
    django默认使用sqlite3 数据库

模型定义好以后,需要更新数据库。

python manage.py makemigrations

python manage.py migrate

python 复制代码
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... OK
  Applying auth.0001_initial... OK
  Applying admin.0001_initial... OK
  Applying admin.0002_logentry_remove_auto_add... OK
  Applying admin.0003_logentry_add_action_flag_choices... OK
  Applying contenttypes.0002_remove_content_type_name... OK
  Applying auth.0002_alter_permission_name_max_length... OK
  Applying auth.0003_alter_user_email_max_length... OK
  Applying auth.0004_alter_user_username_opts... OK
  Applying auth.0005_alter_user_last_login_null... OK
  Applying auth.0006_require_contenttypes_0002... OK
  Applying auth.0007_alter_validators_add_error_messages... OK
  Applying auth.0008_alter_user_username_max_length... OK
  Applying auth.0009_alter_user_last_name_max_length... OK
  Applying auth.0010_alter_group_name_max_length... OK
  Applying auth.0011_update_proxy_permissions... OK
  Applying auth.0012_alter_user_first_name_max_length... OK
  Applying sessions.0001_initial... OK
  Applying student_rest.0001_initial... OK
  1. Student 模型加入到管理后台
    为了添加数据方便,可以将新建的model 添加到django管理后台,添加初始数据更加方便

打开 RestTutorial/student_rest/admins.py 文件,添加如下代码

  1. 启动项目,添加初始数据
    创建1个管理员帐号,并启动项目:
python 复制代码
python manage.py createsuperuser 
python manage.py runserver

通过admin后台添加数据

4. DRF编程实现RESTful 接口

DRF 编程很关键的一步是定义Serializer 类,用于将 model 数据序列化。其使用方式与django Form 表单非常相似。

DRF 视图可采用函数式编程,或Class Based View(CBV)视图类的方式编程,并且DRF内置了各种通用视图类来简化编程。

  1. 自定义Serializer

    新建文件: tutorial/student_rest/serializers.py, 输入以下代码

  2. 用函数式编程实现视图功能
    DRF对视图编程,提供了@api_view() 装饰器来实现函数式编程,通常响应仅提供Json字节串,不提供DRF特有的接口测试页面功能。

    打开 RestTutorial/student_rest/views.py文件,输出以下代码

CBV 视图类实现代码

下面我们新建1个文件 RestTutorial/student_rest/views_cbv.py, 输入以下代码

python 复制代码
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 IsAdminUser

class StudentList(generics.ListCreateAPIView):
    queryset = Student.objects.all()
    serializer_class = StudentSerializer

class StudentDetail(generics.RetrieveUpdateDestroyAPIView):
    queryset = Student.objects.all()
    serializer_class = StudentSerializer

非常简洁地就实现了第4章的全部功能。 下面为新的视图类添加路由;

打开 tutorial/student_rest/urls.py, 添加

python 复制代码
    path("v2/", views_cbv.StudentList.as_view()), # 用于Class-based View测试, list, create
    path("v2/<int:pk>/", views_cbv.StudentDetail.as_view()), # 用于Class-based View测试, retrieve, update, delete
相关推荐
凡人的AI工具箱2 分钟前
15分钟学 Go 第 60 天 :综合项目展示 - 构建微服务电商平台(完整示例25000字)
开发语言·后端·微服务·架构·golang
陈王卜5 分钟前
django+boostrap实现发布博客权限控制
java·前端·django
景天科技苑13 分钟前
【vue3+vite】新一代vue脚手架工具vite,助力前端开发更快捷更高效
前端·javascript·vue.js·vite·vue项目·脚手架工具
chnming198718 分钟前
STL关联式容器之map
开发语言·c++
进击的六角龙20 分钟前
深入浅出:使用Python调用API实现智能天气预报
开发语言·python
檀越剑指大厂20 分钟前
【Python系列】浅析 Python 中的字典更新与应用场景
开发语言·python
VertexGeek21 分钟前
Rust学习(八):异常处理和宏编程:
学习·算法·rust
石小石Orz22 分钟前
Three.js + AI:AI 算法生成 3D 萤火虫飞舞效果~
javascript·人工智能·算法
小行星12524 分钟前
前端预览pdf文件流
前端·javascript·vue.js
join825 分钟前
解决vue-pdf的签章不显示问题
javascript·vue.js·pdf