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
相关推荐
孤飞15 小时前
zero2Agent:面向大厂面试的 Agent 工程教程,从概念到生产的完整学习路线
算法
hef28816 小时前
如何生成特定SQL的AWR报告_@awrsqrpt.sql深度剖析单条语句性能
jvm·数据库·python
Jinkxs16 小时前
从语法纠错到项目重构:Python+Copilot 的全流程开发效率提升指南
python·重构·copilot
技术专家16 小时前
Stable Diffusion系列的详细讨论 / Detailed Discussion of the Stable Diffusion Series
人工智能·python·算法·推荐算法·1024程序员节
段一凡-华北理工大学16 小时前
【大模型+知识图谱+工业智能体技术架构】~系列文章01:快速了解与初学入门!!!
人工智能·python·架构·知识图谱·工业智能体
前端摸鱼匠16 小时前
Vue 3 的defineEmits编译器宏:详解<script setup>中defineEmits的使用
前端·javascript·vue.js·前端框架·ecmascript
csdn_aspnet17 小时前
C# (QuickSort using Random Pivoting)使用随机枢轴的快速排序
数据结构·算法·c#·排序算法
IT小Qi17 小时前
iperf3网络测试工具
网络·python·测试工具·信息与通信·ip
以神为界17 小时前
Python入门实操:基础语法+爬虫入门+模块使用全指南
开发语言·网络·爬虫·python·安全·web
xcjbqd017 小时前
Python API怎么加Token认证_JWT生成与验证拦截器实现
jvm·数据库·python