欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 教育 > 幼教 > DRF(Django-Rest-Framework快速实现 RESTful API 接口编程)+Vue.JS前后端分离项目

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

2024/11/30 6:54:45 来源:https://blog.csdn.net/weixin_46530492/article/details/143465331  浏览:    关键词:DRF(Django-Rest-Framework快速实现 RESTful API 接口编程)+Vue.JS前后端分离项目

文章目录

        • RF简介
        • RESTful API简介
        • Vue简介
        • RESTFul API 接口需求及设计
        • 4. DRF编程实现RESTful 接口
        • 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个项目

django-admin startproject RestTutorial

RestTutorial 项目下,新建1个app

cd RestTutorial
python manage.py startapp student_rest

在这里插入图片描述

  1. 修改全局配置
    打开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
  1. 准备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
  1. Student 模型加入到管理后台
    为了添加数据方便,可以将新建的model 添加到django管理后台,添加初始数据更加方便

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

  1. 启动项目,添加初始数据
    创建1个管理员帐号,并启动项目:
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, 输入以下代码

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

在这里插入图片描述

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com