1.drf入门

【一】WEB应用模式

1)前后端开发模式

  • 前后端混合模式图

image-20240724171328471

  • 前后端分离模式图

image-20230514233552329

【二】API接口

1)概念

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

2)四大特点

  • url :url链接
  • 请求方式:get、post、put、patch、delete
  • 请求参数:json 或 xml 格式的 key-value 类型数据
  • 响应结果:json或xml格式数据

【三】接口测试工具

# postman官网
https://www.postman.com/
    
# Apifox官网
https://apifox.com/
# Apifox = Postman + Swagger[接口文档] + Mock[模拟测试数据] + JMeter[压测工具]

image-20240724121411519

【四】restful规范

1)10条规范

1.数据的安全保障(url链接一般采用https)

  • https 相较于 http 更安全

2.接口中带api表示

  • 出现api字眼就代表请求url链接是完成后台数据交互的

  • https://api.baidu.com
    https://www.baidu.com/api
    

3.接口中带版本标识

  • https://api.baidu.com/v1
    https://api.baidu.com/v2
    

4.数据即是资源,一般使用名词(可复数)

  • https://api.baidu.com/users
    https://api.baidu.com/books
    https://api.baidu.com/book
    

5.资源操作由请求方式决定(增删改查)

  • https://api.baidu.com/books
    # post请求:新增一本书书
    https://api.baidu.com/books
    # get请求:获取所有书
    
    https://api.baidu.com/books/1
    # get请求:获取主键为1的书
    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.请求地址中带过滤条件

  • https://cn.bing.com/search?q=微博
    

7.响应状态码

  • http响应状态码

    • 临时响应:1xx

    • 正确响应:2xx

    • 重定向响应:3xx

    • 客户端异常:4xx

    • 服务端异常:5xx

8.响应中带错误信息

  • {code:101,msg:"用户名密码错误"}
    {code:100,msg:"成功"}
    

9.服务器向用户返回结果 的规范

  • GET /collection:返回资源对象的列表(数组)  
    # [{name:红楼梦,price:20},{name:西游记,price:30}]
    GET /collection/resource:返回单个资源对象
    # {name:红楼梦,price:20}
    POST /collection:返回新生成的资源对象
    PUT /collection/resource:返回完整的资源对象
    PATCH /collection/resource:返回被修改的属性
    DELETE /collection/resource:返回一个空文档
    

10.返回数据总带url链接

2)总结

# 响应数据要有状态码、状态信息以及数据本身
{
    "status": 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"
        },
        ...
    ]
}

【五】序列化与反序列化

1)序列化

  • 将我们识别的数据(字典、列表、对象)转换成指定的格式(json格式字符串、pickle二进制)提供给别人
  • 在django中获得的数据默认是模型对象(queryset对象),但模型对象数据无法直接提供给前端或别的平台使用,须将数据进行序列化,变为json格式字符串,提供别人使用

2)反序列化

  • 将别人提供的数据(json格式字符串、pickle二进制)转换成我们需要的格式(字典、列表、对象)

  • 前端js提供的json数据,对于python而言是字符串,须进行反序列化转换成模型对象,才能将数据保存到数据库中

【六】drf安装和快速使用

1)概念

django rest framwork
是django框架上一个可以快速实现restful规范接口的快速开发框架
# 安装
pip install djangorestframework

2)使用示例

  • app . models
from django.db import models

class Book(models.Model):
    name = models.CharField(
        verbose_name="书名",
        max_length=32
    )
    price = models.IntegerField(
        verbose_name="价格"
    )
  • Django . url
from django.contrib import admin
from django.urls import path, include

urlpatterns = [
    path('admin/', admin.site.urls),
    path('api/v1/', include('App.urls'))
]
  • app . url
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
  • app . views
from django.shortcuts import render
from .models import Book
from .serializer import BookSerializer
from rest_framework.viewsets import ModelViewSet

class BookView(ModelViewSet):
    serializer_class = BookSerializer
    queryset = Book.objects.all()
  • 在 app 内创建 serializer.py
from rest_framework import serializers
from .models import Book
class BookSerializer(serializers.ModelSerializer):
    class Meta:
        model = Book
        fields = '__all__'
posted on 2024-08-01 10:38  晓雾-Mist  阅读(32)  评论(0)    收藏  举报