当前位置: 首页 > article >正文

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... 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 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 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, 添加

    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

在这里插入图片描述


http://www.kler.cn/a/378756.html

相关文章:

  • selinux和防火墙
  • 「Mac畅玩鸿蒙与硬件28」UI互动应用篇5 - 滑动选择器实现
  • ENSP (虚拟路由冗余协议)VRRP配置
  • Linux和,FreeRTOS 任务调度原理,r0-r15寄存器,以及移植freertos(一)
  • 东北虎豹国家公园shp格式范围
  • 证书下行,这些高质量IT证书仍值得考
  • roberta融合模型创新中文新闻文本标题分类
  • π0——用于通用机器人控制的流匹配VLA模型:一套框架控制7种机械臂,实现丝滑迁移与平替
  • 13.字符串
  • 记本地第一次运行seatunnel示例项目
  • springboot十分钟快速搭建
  • 法律文件智能识别:免费OCR平台优化数字化管理
  • 设计模式08-行为型模式1(命令模式/迭代器模式/观察者模式/Java)
  • 深度学习与时间序列预测的关系
  • 微服务核心——网关路由
  • 详解Rust标准库:VecDeque 队列
  • 浩克下载 v1.8.1 最强磁力下载器
  • [ shell 脚本实战篇 ] 编写恶意程序实现需求(恶意程序A监测特定目录B出现特定文件C执行恶意操作D-windows)
  • 「 分布式技术 」 说说唯一ID与CAS|得物技术
  • rust 压缩解压库flate2保姆级教程
  • 有a个学生,每个学生有b门课程的成绩。要求在用户输入学生序号以后,能输出该学生的全部成绩
  • 入门 | Kafka数据使用vector消费到Loki中使用grafana展示
  • atest v0.0.18 提供了强大、灵活的 HTTP API Mock 功能
  • WPF+MVVM案例实战(二十一)- 制作一个侧边弹窗栏(AB类)
  • 向量数据库 PieCloudVector 进阶系列丨打造音乐推荐系统
  • 高效实现吉客云·奇门数据集成到MySQL的技术方案