drf之API接口

 



一、前后端开发模式

# 以前开发项目是前端写好静态文件 然后后端再用模板语法套到这个静态文件中 之后衍生出了全栈开发 就是前端后端都一个人写 

# 然就现在逐渐开始前后端分离开发项目
后端人员只需要写接口(API接口), 使用postman测试
前端人员只需要写前端,写的过程中使用mock数据
最后前后端联合测试即可

 

 

 

 二、API接口

复制代码
# 通过网络,规定前后端交互规则的url链接,也就是前后端交互的媒介
# 之前写的点赞点踩功能就是一个api接口

# API接口的样子
    -url:长得像返回数据的url链接
        https://api.map.baidu.com/place/v2/search
    -请求方式:get、post、put、patch、delete
        采用get方式请求上方接口
    -请求参数:json或xml格式的key-value类型数据
        ak:6E823f587c95f0148c19993539b99295
        region:上海
        query:肯德基
        output:json
        响应结果:json或xml格式的数据
    -响应结果:json或xml格式的数据
复制代码

三、接口测试工具postman

后端人员写好接口后 是需要测试,因为没有页面所以不可能在页面上测试,所以需要接口测试工具:postman

postman本质就是模拟发送http请求

测试接口的工具有很多不止postman

去官网下载即可:https://www.postman.com/downloads/

安装也很方便只需双击即可

1.postman简介

基于网络发送的编码格式有三种:

默认的urlencoded, form-data,json格式

而postman中都有

而且可以发送任意请求

 

 

 

 四、restful规范

REST全称是Representational State Transfer,中文意思是表述:表征性状态转移, 它首次出现在2000年Roy Fielding的博士论文中

RESTful是一种定义Web API接口的设计风格,尤其适用于前后端分离的应用模式中

restful规范有10点规范,不过公司也有自己的风格规范

复制代码
# 1 一般使用https协议 数据交互     http+tsl/ssl=https   比http更安全,交互是加密传输
    交互用json>>>如果很容易被截获>>>明文显示给别人,数据不安全 所以要使用https数据交互
# 2 接口地址中带api标识
    https//api.baidu.com/books    域名中
    https//www.baidu.com/api       地址中
# 3 接口地址中带版本标识
    https://api.baidu.com/v1   v1版本
    https://api.baidu.com/v2    v2版本 
    就是一个应用软件更新之后 地址需要匹配携带版本的标识 一个给老版本用一个给新版本用
# 4 数据即是资源, 均使用名词, 不要使用动词
    eg:删除图书接口
    好的: https://api.baidu.com/v1/books 
   不好的: https//api.baidu.com/v1/delete-books
    
   新增图书: https://api.baidu.com/v1/books
# 5 资源操作由请求方式决定
    -新增图书: https://api.baidu.com/v1/books    post请求
    -删除图书: https://api.baidu.com/v1/books    delete请求
    -修改图书: https://api.baidu.com/v1/books     put请求
    -获取图书: https://api.baidu.com/v1/books    get请求

# 6 地址中带搜索条件
    https://api.baidu.com/v1/zoos?animal_type_id=1    指定筛选条件
    https://api.baidu.com/v1/books?name=红楼梦   

# 7 想要状态码
    -http的响应状态码
      1xx    请求正在处理
      2xx    成功       200 请求成功        201 创建成功
      3xx    重定向     301 和 302 >>>301与 302的区别>>一个是永久重定向  一个是临时重定向 
      4xx    客户端错误  403 和 404>>> 403:没有权限  404:地址不存在
      5xx    服务端错误
    响应中带状态码
        {code:10000}
# 8 响应中带错误信息
    {code:999, msg: 登入失败}
    
# 9 针对不同操作,服务端向用户返回的结果应该符合一下规范    
    GET /collection:返回资源对象的列表(数组)
        -[{name:红楼梦,price:12},{name:西游记,price:12}]
    GET /collection/resource:返回单个资源对象
        -{name:红楼梦,price:12}
    POST /collection:返回新生成的资源对象
        -{name:红楼梦,price:12}
    PUT /collection/resource:返回完整的资源对象
        -{name:红楼梦,price:12}
    PATCH /collection/resource:返回完整的资源对象
        -{name:红楼梦,price:12}
    DELETE /collection/resource:返回一个空文档
        -
# 10 响应中带链接地址
    "img": "https://image.baidu.com/kfc/001.png"
复制代码

五、序列化与反序列化

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

# 序列化: 把我们识别的数据转换成指定的格式提供给别人。
    -python后端: python的对象、字典、列表
    -前端:字符串、json格式字符串
    -把我们能识别的格式>>>转成别人能识别的格式给他
    
    -例如:我们在django中获取到的数据默认是模型对象,但是模型对象数据无法直接提供给前端或别的平台使用,所以我们需要把数据进行序列化,变成字符串或者json数据,提供给别人。

# 反序列化:把别人提供的数据转换/还原成我们需要的格式。
    -前端:字符串、json格式字符串 提交给我们
    -python后端:把json格式字符串转成我们能够识别的格式:字典,对象,queryset对象

    -例如:前端js提供过来的json数据,对于python而言就是字符串,我们需要进行反序列化换成模型类对象,这样我们才能把数据保存到数据库中。
    
# 前后端分离开发中>>>>站在后端开发的角度
    -序列化>>> read(别人读我的数据) >>>出>>>后端给前端
    -反序列化>>> write(别人给我的数据)>>存到数据库 >>>进>>>前端给后端
复制代码

六、drf的快速使用

复制代码
# drf的全称是 djangorestframework 它是django的一个app(第三方插件)  只能使用django框架上

# 可以帮助我们快速的写出符合restful固定的接口

# 现在我们可以写一个书籍的增删改查的功能

# 基于drf写五个接口
    -获取所有 get
    -获取单个 get
    -新增一条 post
    -修改一条 put/patch
    -删除一条 delete
复制代码

1.路由层(url)

复制代码
from django.contrib import admin
from django.urls import path
from rest_framework.routers import SimpleRouter
from app01 import views

router = SimpleRouter()
router.register('books', views.BookView)
urlpatterns = [
    path('admin/', admin.site.urls),
]
urlpatterns += router.urls
复制代码

2.视图层(view)

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


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

3.模型层(model)

from django.db import models


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

4.序列化

from rest_framework import serializers
from .models import Book


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

然后就可以通过postman测试这五个接口是否正常

 

posted @   stephen_hao  阅读(272)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示