zoukankan      html  css  js  c++  java
  • 🍖DRF框架入门介绍

    引入

    1.什么是 RESTful

    • REST与技术无关,它是一种软件架构风格,REST是Representational State Transfer的简称,中文翻译为“表征状态转移

    • REST从资源的角度类审视整个网络,它将分布在网络中某个节点的资源通过URL进行标识,客户端应用通过URL来获取资源的表征,获得这些表征致使这些应用转变状态

    • 所有的数据,不管是通过网络获取的还是操作(增删改查)的数据,都是资源,将一切数据视为资源是REST区别与其他架构风格的最本质属性

    • 对于REST这种面向资源的架构风格,有人提出一种全新的结构理念,即:面向资源架构(ROA:Resource Oriented Architecture)

    一.Web应用两种开发模式

    1.前后端不分离模式

    • 也叫前后端混合开发模式, 需要后端写模板语言(dtl), 返回的是HTML页面
    • 浏览器 : 请求动态页面
    • 后端 : 返回HTML

    image-20210412152509683

    • 优点

    可以直接渲染页面, 方便处理请求数据

    • 缺点

    耦合度非常高, 不方便扩展

    2.前后端分离模式

    • 前端 : 只写前端

    • 后端 : 只专注于写后端接口, 返回 json, xml格式数据

    • 流程 :

    浏览器到静态文件服务器请求静态页面, 静态服务器返回静态页面

    JS 请求达到后端, 后端再返回 JSON 或 XML格式的数据

    image-20210412154658859

    • 优点
    • 不需要管前端怎么实现, 后端开发者需要做的就是写接口

    • 只需要知道, 你前端传过来什么, 然后需要后端这边传回去什么就行了

    • 主要的就是操作逻辑, 解耦合性高

    • 缺点
    • 程序员不知道前端的具体流程, 然后对表的设计, 对业务或许就理解的没有那么透彻

    • 还存在前后端联调各种问题, 前端和后端的沟通等

    二.API 接口和 RESTful API规范

    1.API 接口

    • 规定了前后端信息交互规则的 url 连接, 也就是前后端交互的媒介

    2.为什么使用这个规范

    • 为了在团队内部形成共识、防止个人习惯差异引起的混乱
    • 我们需要找到一种大家都觉得很好的接口实现规范, 用途一目了然,减少双方之间的合作成本

    3.接口文档

    • 书写接口的用途和使用方法,数据格式等
    • 可以手动书写, 或者使用工具自动生成(coreapi,swagger)

    4.RESTful API规范

    一共有十条, 规定这么做, 但公司可以根据自己的需求改变

    • 1.数据的安全保障, 通常使用 https 进行传输
    # http协议 + ssl证书
    # 使用https协议进行传输可以提高数据交互过程中的安全性
    # 就算传输过程中被截获也需要 公钥-私钥 匹配才能得到数据
    
    • 2.接口特征表现 : 域名中有 api 标识
    # 尽量将API部署在专用域名,看到api字眼,就代表该请求url链接是完成前后台数据交互的
        https://api.example.com 
        https://127.0.0.0:8080/api/ 
    
    • 3.多版本 : 请求地址中带版本, 或者在请求头中
    # v1,v2 代表不同版本
        https://127.0.0.0:8080/api/v1/
        https://127.0.0.0:8080/api/v2/
    
    • 4.数据即资源, 均使用名词表示 (可以复数尽量不要用动词)
    # 使用名词,可以使用复数
    	https://api.example.com/v1/books/
    
    # 不符合规范
    	https://api.example.com/v1/get_all_books
    
    • 5.通过请求方式的不同来执行不同的操作
    get : 获取数据
    post : 新增数据
    put : 全部更新
    patch : 局部更新 (基本上都使用put)
    delete : 删除
    
    # 示例 : 
        https://api.baidu.com/books   - get请求:   获取所有书
        https://api.baidu.com/books/1 - get请求:   获取主键为1的书
        https://api.baidu.com/books   - post请求:  新增一本书
        https://api.baidu.com/books/1 - put请求:   整体修改主键为1的书
        https://api.baidu.com/books/1 - patch请求: 局部修改主键为1的书
        https://api.baidu.com/books/1 - delete请求:删除主键为1的书
    
    • 6.请求路径中带过滤, 在 url 后面带参数
    https://api.example.com/v1/?name='金'&order=asc
    https://api.example.com/v1/name?sortby=name&order=asc
    
    • 7.返回数据中携带响应状态码
    # 返回的json格式中放状态码, 标志当前请求成功或失败
        2XX : 正常响应
        3XX : 重定向响应
        4XX : 客户端异常
        5XX : 服务端异常
    
    • 8.返回数据中携带错误信息
    # 错误处理, error当做key, 错误信息当做value
    	{error : '错误信息'}
    
    • 9.针对不同操作, 返回数据符合如下规范(这只是规范)
    GET /books:     返回资源对象的列表      (数组)[{},{},{}]
    GET /books/1:   返回单个资源对象         {}
    POST /books:    返回新生成的资源对象     {新增的书}
    PUT /books/1:   返回完整的资源对象       {返回修改后的}
    PATCH /books/1: 返回完整的资源对象       {返回修改后的}
    DELETE /books/1:返回一个空文档   
    
    • 10.返回结果中携带资源连接
    {
        "name":"xxx博客",
        "url":"https://www.cnblogs.com/songhaixing/"
    }
    

    三.接口测试工具 : Postman 与 Appizza

    1.工具地址

    ps : 接口测试工具不止这两种, 有很多:Postwoman ....

    2.Postman常用功能介绍

    • get请求:

    image-20210412164043895

    • post请求:

    image-20210412164346004

    • 导出请求结果, 导到一个文件里面

    image-20210412164459622

    • 导入请求文件

    image-20210412164620897

    3.Apizza 界面

    • 中文显示, 功能上与Postman使用没有很大的差别

    image-20210412164935894

    四.Django-RESTful 介绍与安装

    1.介绍

    • Django rest_framework, 简称 drf, 可以更方便的使用django写出符合 RESTful 规范的接口, (缩减编写api接口的代码)
    • Django REST framework是一个建立在Django基础之上的Web应用开发框架(Django的一个app),可以快速的开发REST API接口应用
    • 在REST framework中,提供了序列化器Serialzier的定义,可以帮助我们简化序列化与反序列化的过程
    • 不仅如此,还提供丰富的类视图、扩展类、视图集来简化视图的编写工作
    • REST framework还提供了认证、权限、限流、过滤、分页、接口文档等功能支持
    • REST framework提供了一个API 的Web可视化界面来方便查看测试接口

    2.安装与快速使用(csrf禁用状态)

    • 安装 drf
    pip3 install djangorestframework
    
    • settings.py 文件中添加app
    INSTALLED_APPS = [
        'rest_framework'
    ]
    
    • models.py 文件书写模型类
    from django.db import models
    
    
    class Book(models.Model):
        nid = models.AutoField(primary_key=True)
        title = models.CharField(max_length=32)
        price = models.DecimalField(max_digits=8,decimal_places=2)
        author = models.CharField(max_length=16)
        publish = models.CharField(max_length=16)
    # 创建好模型类执行数据库迁移命令
    
    • serializers.py 新建一个序列化类(该文件自己创建)
    from rest_framework.serializers import ModelSerializer
    from drf_test import models
    
    
    class BookSerializers(ModelSerializer):
        class Meta:
            model = models.Book  #  指明该序列化器处理的数据字段从模型类Book参考生成
            fields = "__all__"   # 指明该序列化器包含模型类中的哪些字段,’all‘指明包含所有字段
    
    • views.py 书写视图类
    from django.shortcuts import render
    from rest_framework.viewsets import ModelViewSet
    from drf_test.serializers import BookSerializers
    from drf_test import models
    
    
    class BookView(ModelViewSet):
        serializer_class = BookSerializers  # 指明该视图在进行序列化或反序列化时使用的序列化器
        queryset = models.Book.objects.all()  # 指明该视图集在查询数据时使用的查询集
    
    • urls.py 书写路由关系
    from django.contrib import admin
    from django.urls import path
    from rest_framework.routers import SimpleRouter
    from drf_test import views
    
    
    router = SimpleRouter()  # 用来处理视图的路由器
    router.register('book',views.BookView)  # 在路由器中注册视图集
    urlpatterns = [
        path('admin/', admin.site.urls),
        	
    ]
    urlpatterns += router.urls  # 将路由器中的所有路由信息拼接到Django中的路由列表中
    
    • 启动项目开始测试

      期间遇到的一个问题 : OrderedDict‘ object has no attribute ‘register‘报错信息

      • 原因是markdown的版本不兼容导致的问题,可以将markdown的版本安装到3.2.1,问题即得到解决
      pip3 install markdown==3.2.1 -i https://pypi.tuna.tsinghua.edu.cn/simple
      

    image-20210412182703786

    • POST : 添加一本书籍信息

    asdafdsc

    • GET : 获取图书 (nid=2的书籍)

    ghg

    可以点击下面的输入框进行修改

    • 点击 DELETE 删除书籍 (nid=2)

    xscd

  • 相关阅读:
    拉伸按钮背景图片:stretchableImageWithLeftCapWidth:
    CocoaPods详解之(三)----制作篇
    CocoaPods详解之(二)----进阶篇
    CocoaPods详解之(一)----使用篇
    下载第三方类库编译报错
    XMPP之ios即时通讯客户端开发-创建工程添加XMPPFramework及其他框架(三)
    error: invalid abbreviation code [25] for DIE at 0x0000003e in Assertion failed: (*offset_ptr == end_prologue_offset), function ParsePrologue, file /S
    MAC终端:如何调整字体大小和终端样式
    MAC 安装下载好的.gz包(不像.dmg直接双击就行了)
    页面跳转
  • 原文地址:https://www.cnblogs.com/songhaixing/p/14670480.html
Copyright © 2011-2022 走看看