DRF入门规范,API接口,接口测试工具,restful规范,序列化和反序列化,drf安装和快速使用

Ⅰ DRF入门规范

【一】 Web应用模式

  • 在开发Web应用中,有两种应用模式:

【1】前后端不分离

【2】前后端分离

【3】前后端开发模式

# 1 前后端混合开发
-不少公司在用  
    -flask 混合
    -django 混合
    -例如最简单的bbs项目 
-模板:dtl语法:django template language 模板语法
        {{ }}
        {% %}
-在后端渲染:
        qs对象--->循环写到模板中--->模板语法写的
-渲染完后--->模板--->纯粹的 html,css,js-->不会再含有 模板语法了
-返回到客户端浏览器--->看到好看的样子
-页面静态化
-如果要做混合开发
    -会后端
    -稍微会点前端
        -前端后端配合
        -全栈开发
            
            
# 2 前后端分离
-后端只做后端-->一点前端都不接触--->写接口API
-前端专门做前端--->大前端
    -web前端
    -安卓,ios
    -微信小程序
    -桌面应用
    。。。。
        
-分开写
    -前端
    -后端
-前后端联调

Ⅱ API接口

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

  • 通过网络,规定了前后台信息交互规则的url链接,也就是前后台信息交互的媒介

  • Web API接口和一般的url链接还是有区别的,Web API接口简单概括有下面四大特点

    • url:长得像返回数据的url链接

    • 请求方式:get、post、put、patch、delete

      • 采用get方式请求上方接口
    • 请求参数:json或xml格式的key-value类型数据

      • ak:6E823f587c95f0148c19993539b99295
      • region:上海
      • query:肯德基
      • output:json
    • 响应结果:json或xml格式的数据

      • 上方请求参数的output参数值决定了响应数据的格式

      • 数据

      • # xml格式
        https://api.map.baidu.com/place/v2/search?ak=6E823f587c95f0148c19993539b99295&region=%E4%B8%8A%E6%B5%B7&query=%E8%82%AF%E5%BE%B7%E5%9F%BA&output=xml
        #json格式
        https://api.map.baidu.com/place/v2/search?ak=6E823f587c95f0148c19993539b99295&region=%E4%B8%8A%E6%B5%B7&query=%E8%82%AF%E5%BE%B7%E5%9F%BA&output=json
        {
            "status":0,
          	"message":"ok",
            "results":[
                {
                    "name":"肯德基(罗餐厅)",
                    "location":{
                        "lat":31.415354,
                        "lng":121.357339
                    },
                    "address":"月罗路2380号",
                    "province":"上海市",
                    "city":"上海市",
                    "area":"宝山区",
                    "street_id":"339ed41ae1d6dc320a5cb37c",
                    "telephone":"(021)56761006",
                    "detail":1,
                    "uid":"339ed41ae1d6dc320a5cb37c"
                }
              	...
        		]
        }
        

【一】api 接口是什么

# api 接口是什么
规定了前后台信息交互规则的url链接,也就是前后台信息交互的媒介
    127.0.0.1:8080/login/?username=silence&age=19
    127.0.0.1:8080/books/

【二】api 接口所含有的东西

# api接口所含有的东西
1 url:url链接
2 请求方式:get、post、delete、put。。。。
3 请求参数:json或xml格式的key-value类型数据  
    地址栏中:login/?name=zyb&age=19
    请求体中:不同编码格式:urlencoded,json,form-data。。。。
        urlencoded:name=zyb&age=19
        json:{"name":"zyb","age":19}
        form-data: 文件混合数据
4 响应结果:json或xml格式的数据

【三】http:请求协议

不同设备之间进行交互 遵循 .HTTP协议. 规则
HTTP协议里面规定了 请求模型与响应模型
服务端遵循 HTTP协议的响应格式
return "200 OK HTTP/1.1" + 响应头 + "\r\n" + 响应体数据

1.请求格式
请求首行 请求方法 请求路径 协议版本
请求头 kv键值对
换行
请求体

2.响应格式
响应首行  响应状态码 协议版本
响应头
换行
响应体

Ⅲ 接口测试工具

发送http的软件
   http请求协议
        请求首行:地址[包含参数],请求方式,http协议版本
        请求头:key-value [cookie,user-agent,referer]
        请求体:不同编码格式
   http响应协议
        响应首行:状态码,状态描述
        响应头:key-value[cookie]
        响应体:html,json,xml 

【一】了解

# 老牌收费:postman    国产免费:APIfox    开源:postwoman
	-可以模拟发送http请求的软件
    	-可以发送任意请求
        -可以携带请求头,请求体,请求参数。。。

【二】 Apifox

  • Apifox = Postman + Swagger[接口文档] + Mock[模拟测试数据] + JMeter[压测工具]
  • 下载地址:https://apifox.com/

  • 使用

【三】postman

Ⅳ restful规范

  • REST全称是Representational State Transfer,中文意思是表述(编者注:通常译为表征性状态转移)。 它首次出现在2000年Roy Fielding的博士论文中。
  • RESTful是一种定义Web API接口的设计风格,尤其适用于前后端分离的应用模式中。
  • 这种风格的理念认为后端开发任务就是提供数据的,对外提供的是数据资源的访问接口,所以在定义接口时,客户端访问的URL路径就表示这种要操作的数据资源。
  • 事实上,我们可以使用任何一个框架都可以实现符合restful规范的API接口。
# 前后端分离后,后端写api接口
	接口不能乱写
    有些规范
    	restful规范:公共的规范,大家都尽量遵守的规范
        公司自己的规范
    RESTful是一种定义Web API接口的设计风格,尤其适用于前后端分离的应用模式中  

【一】数据的安全保障,url链接使用https

  • url链接一般都采用https协议进行传输

    注:采用https协议,可以提高数据交互过程中的安全性

# 数据的安全保障--url链接使用https
    http
    https:更安全

【二】接口特征表现,接口中带api标识

注:看到api字眼,就代表该请求url链接是完成前后台数据交互的

# 接口中带api标识
    	https://api.baidu.com
		https://www.baidu.com/api

【三】多数据版本共存,接口中带版本标识

注:url链接中的v1、v2就是不同数据版本的体现(只有在一种数据资源有多版本情况下)

# 接口中带版本标识
    	https://api.baidu.com/v1
        https://api.baidu.com/v2

【四】数据即是资源,均使用名词(可用复数)

注:一般提倡用资源的复数形式,在url链接中奖励不要出现操作资源的动词,错误示范:https://api.baidu.com/delete-user

#  数据即是资源,均使用名词(可用复数)
        https://api.baidu.com/users
        https://api.baidu.com/books
        https://api.baidu.com/book

【五】资源操作由请求方式决定,通过请求方式,决定资源操作方式(增删查改-->curd)

#  通过请求方式,决定资源操作方式(增删查改--》curd)
        https://api.baidu.com/books - get请求:获取所有书
        https://api.baidu.com/books - post请求:新增一本书书
        https://api.baidu.com/books/1 - get请求:获取主键为1的书
        https://api.baidu.com/books/1 - put请求:整体修改主键为1的书
        https://api.baidu.com/books/1 - delete请求:删除主键为1的书

【六】过滤,通过在url上传参的形式传递搜索条件,请求地址中带过滤条件

# 请求地址中带过滤条件
		https://api.example.com/v1/zoos?name=周杰伦

【七】响应中带状态码

【1】正常响应

  • 响应状态码2xx
    • 200:常规请求
    • 201:创建成功

【2】 重定向响应

  • 响应状态码3xx
    • 301:永久重定向
    • 302:暂时重定向

【3】客户端异常

  • 响应状态码4xx
    • 403:请求无权限
    • 404:请求路径不存在
    • 405:请求方法不存在

【4】服务器异常

  • 响应状态码5xx
    • 500:服务器异常
# 响应中带状态码
		- http响应状态码:1xx,2xx,3xx,4xx,5xx
    	- 公司自定义的状态码
        	-100 成功
            -101 xx错误
            -102  xx错误
        - mysql:遇到错误,不要搜文字,搜错误码
        -{code:100}

【八】错误处理,应返回错误信息

{
    error: "无权限操作"
}
# 响应中带错误信息
		-{code:101,msg:"用户名密码错误"}
    	-{code:100,msg:"成功"}

【九】 返回结果,针对不同操作,服务器向用户返回的结果应该符合以下规范

#  返回结果,针对不同操作,服务器向用户返回的结果应该符合以下规范  
		GET /collection:返回资源对象的列表(数组)  
    		[{name:红楼梦,price:100},{name:红楼梦1price:90}]
        GET /collection/resource:返回单个资源对象
        	-{name:红楼梦,price:100}
        POST /collection:返回新生成的资源对象
        	-{name:红楼梦,price:100}
        PUT /collection/resource:返回完整的资源对象
        	-{name:红楼梦,price:100}
        DELETE /collection/resource:返回一个空文档

【十】需要url请求的资源需要访问资源的请求链接

#  返回数据中带url链接
# Hypermedia API,RESTful API最好做到Hypermedia,即返回结果中提供链接,连向其他API方法,使得用户不查文档,也知道下一步应该做什么
{
  	"status": 0,
  	"msg": "ok",
  	"results":[
        {
            "name":"肯德基(罗餐厅)",
            "img": "https://image.baidu.com/kfc/001.png"
        }
      	...
		]
}
  • 最后,比较好的接口返回格式
{
  	"code": 0,
  	"msg": "ok",
  	"results":[
        {
            "name":"肯德基(罗餐厅)",
            "location":{
                "lat":31.415354,
                "lng":121.357339
            },
            "address":"月罗路2380号",
            "province":"上海市",
            "city":"上海市",
            "area":"宝山区",
            "street_id":"339ed41ae1d6dc320a5cb37c",
            "telephone":"(021)56761006",
            "detail":1,
            "uid":"339ed41ae1d6dc320a5cb37c"
        }
      	...
		]
}

Ⅴ 序列化和反序列化

  • 序列化指的是:数据转换格式
  • api接口开发,最核心最常见的一个过程就是序列化,所谓序列化就是把数据转换格式,序列化可以分两个阶段:

【一】 序列化

  • 把我们识别的数据[字典,列表,对象]转换成指定的格式[json格式字符串,pickle二进制]提供给别人。
例如:我们在django中获取到的数据默认是模型对象(queryset对象),但是模型对象数据无法直接提供给前端或别的平台使用,所以我们需要把数据进行序列化,变成json格式字符串,提供给别人。

【二】反序列化

  • 把别人提供的数据转换/还原成我们需要的格式。
例如:前端js提供过来的json数据,对于python而言就是字符串,我们需要进行反序列化换成模型类对象,这样我们才能把数据保存到数据库中

【三】小结

# 1 序列化指的是:数据转换格式

# 2 api接口开发,最核心最常见的一个过程就是序列化,所谓序列化就是把数据转换格式,序列化可以分两个阶段:

# 序列化: 把我们识别的数据[字典,列表,对象]转换成指定的格式[json格式字符串,pickle二进制]提供给别人。

例如:我们在django中获取到的数据默认是模型对象(queryset对象),但是模型对象数据无法直接提供给前端或别的平台使用,所以我们需要把数据进行序列化,变成json格式字符串,提供给别人。

# 反序列化:把别人提供的数据转换/还原成我们需要的格式。

例如:前端js提供过来的json数据,对于python而言就是字符串,我们需要进行反序列化换成模型类对象,这样我们才能把数据保存到数据库中

Ⅵ drf安装和快速使用

【一】drf是什么

  • django rest framwork:django框架上 一个可以快速实现restful规范接口的 快速开发框架

【二】Django REST framework介绍

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

【三】特点

  • 提供了定义序列化器Serializer的方法,可以快速根据 Django ORM 或者其它库自动序列化/反序列化;
  • 提供了丰富的类视图、Mixin扩展类,简化视图的编写;
  • 丰富的定制层级:函数视图、类视图、视图集合到自动生成 API,满足各种需要;
  • 多种身份认证和权限认证方式的支持;[jwt]
  • 内置了限流系统;
  • 直观的 API web 界面;
  • 可扩展性,插件丰富

【四】drf安装

# 安装
	pip3 install djangorestframework
    最新drf支持django4.x以上   # 若是3有的功能/版本会不兼容  而其装drf时他会帮你卸载 并帮你安装最新版本django
    django:pip3 install django==4.2.14
    drf:pip3 install djangorestframework --upgrade     # 3.15.2

【五】关于软件版本

#  关于软件版本
	python:  
        3.12.x
        3.11.09  # 小版本做bug更改
        
# 09  小版本做bug更改
# 11  大版本做功能改进
# 3   可能其架构都开始改变

【六】drf使用

【1】创建一个Django项目:djangodrf 并创建APP:app01

  • app01下的models创建一个表,并迁移数据库
  • models.py
from django.db import models

# Create your models here.

class Book(models.Model):
    name = models.CharField(max_length=32)
    price = models.IntegerField()

【2】进行路由分发

  • djangodrf 下的urls进行路由分发

  • urls.py


from django.contrib import admin
from django.urls import path,include

urlpatterns = [
    path('admin/', admin.site.urls),
    path('api/v1/', include('app01.urls')),
]

  • app01下的urls

from django.contrib import admin
from django.urls import path


from .views import BookView
from rest_framework.routers import SimpleRouter
router = SimpleRouter()
router.register('books', BookView, 'books')



urlpatterns = [

]

urlpatterns += router.urls

【3】视图层

  • app01下的views
from django.shortcuts import render

# Create your views here.

from rest_framework.viewsets import ModelViewSet
from .models import Book
from .serializer import BookSerializer

class BookView(ModelViewSet):
    serializer_class = BookSerializer
    queryset = Book.objects.all()

【4】serializer.py

from rest_framework import serializers
from .models import Book

class BookSerializer(serializers.ModelSerializer):
    class Meta:
        model = Book
        fields = '__all__'

【5】在表中添加数据

【6】运行程序,用Postman对数据进行增删改查

(1)查看全部

(2)增加

(3)单个查看

(4)修改

(5)删除

posted on   silence^  阅读(64)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
点击右上角即可分享
微信分享提示