自学内容网 自学内容网

【1.0】drf初识

【1.0】drf初识

【一】前后端开发模式

【1】前后端混合开发

  • 【示例】flask混合、django混合
  • 【案例】bbs项目
    • 模板:dtl语法(django template language)模板语法 {{}} /{% %}
    • 后端渲染 qs对象–遍历循环到模板中–使用模板语法渲染
    • 渲染完成后 得到纯粹的html css js 不会再有模板语法了
    • 返回到客户端浏览器(页面静态化)

【2】前后端分离

  • 后端做完,只需要写接口api
  • 前端专门负责前端
  • 分开写完,再联调

【二】api接口

【1】介绍
  • 前后端分离,后端只需写接口,通过接口进行简单的数据交互
  • api接口规定了前后端信息交互规则的url链接,是前后端信息交互的媒介
    • 含有信息的url链接
    • 127.0.0.1:8080/login/?name=zhou&age=19
    • 127.0.0.1:8080/books/
【2】api接口含有的内容
  • url : url链接

  • 请求方式:get post delete put…

  • 请求参数:jsonxml格式的key-value类型

    • 地址栏中:(例如login/?name=zhou&age=18数据携带着数据)

    • 请求体中:不同的编码格式 urlencoded,json,form-data …

      # urlencoded:
      key=value的形式  -login/?name=zhou&age=16
      # json:
      json字符串的形式 {'name':'zxq','age':'20'}
      # form-data :
      文件混合数据
      
  • 响应结果:json或xml格式的数据

【3】(补充)请求协议:http
  • 请求首行:协议,协议版本,请求地址,请求方式
  • 请求头:key-value的形式
  • 请求体:不同的编码格式

【三】接口测试工具

【1】软件介绍

  • postman 老牌收费
  • apifox 国产免费
  • postwoman开源

【2】postman

  • 功能单一,收费\
  • 【下载】
    • 官网下载https://www.postman.com/
    • 选择版本(windows x64)
    • 下载好就是一个Postman-win64-Setup.exe,直接打开就会的到桌面快捷方式,直接使用

【3】apifox=postman+swagger[接口文档]+Mock[模拟测试数据]+JMeter[压测工具]

【四】restful规范

【1】介绍
  • 书写接口大家约定俗成遵守restful规范
  • restful是一种定义web API接口的设计风格,尤其适用于前后端分离的应用模式中
【2】十条规范
  • (1)数据的安全保障–url链接使用https
    - `http`
    - `https`更安全
    
  • (2)接口中带有api标识
    - 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)通过请求方式,决定资源操作方式(增删查改—>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的书
    
  • (6)请求地址中带过滤条件
    https://api.example.com/v1/zoos?name=大象
    
  • (7)响应中带状态码
    • http响应状态码:

      1xx,2xx,3xx,4xx,5xx
      
    • 但是公司自己会定义状态码

      • 例如 100错误 101…错误
    • 一般,一个软件都有固定的状态码,出现错误,可以直接搜状态码

  • (8)响应中带错误信息
    -{code:101,msg:"用户名密码错误"}
    -{code:100,msg:"成功"}
    
  • (9)返回结果,针对不同的操作,有不同的返回规范
    #get请求返回所有结果
    GET /collection:返回资源对象的列表(数组)  
       [{name:红楼梦,price:100},{name:红楼梦1,price:90}]
    
    #get请求返回某个数据
    GET /collection/resource:返回单个资源对象
      {name:红楼梦,price:100}
    
    #post请求增加数据--返回增加的数据
    POST /collection:返回新生成的资源对象
            -{name:红楼梦,price:100}
    
    #put返回完整的资源对象
    PUT /collection/resource:返回完整的资源对象
    -{name:红楼梦,price:100}
    
    #delete删除数据 返回一个空文档
    DELETE /collection/resource:返回一个空文档
    
  • (10)返回的数据中带有url链接
【3】比较好的接口返回格式
  • 【示例】

    {
      "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"
            }
          ...
    ]
    }
    

【五】序列化和反序列化

【1】介绍

  • 序列化:将自己的数据—序列化成—别人想要的数据格式(自己–>别人)
  • 反序列化:将别人的数据格式—序列化成–自己想要的数据格式(别人–>自己)

【2】接口中序列化

  • 【介绍】接口是前后端数据交互的一个媒介,一些框架会在前后端数据交互的时候,帮助我们处理好数据的序列化和反序列化
  • 【步骤】django框架举例
    • 序列化:把我们后端的数据【字典、列表、对象】(在django中获取到的数据默认是模型对象(queryset对象))转化成指定的格式【json格式字符串,pickle二进制】提供给别人
    • 反序列化:如前端js传过来的json数据,对于python来说就是字符串,需要反序列化成模型类对象

【六】drf安装和快速使用

【1】介绍

  • 全称django rest framework
  • django框架上,一个可以快速实现restful规范接口的快速开发框架

【2】安装

  • drf是安装在django之上的,目前的二版本支持django4.0以上,所以要版本契合

  • #先控制django的版本
    pip3 install django==4.2.14
    #在django的基础上下载drf
    pip3 install djangorestframework --upgrade
    

【3】简单使用

  • 要求:利用django框架,写出五个接口,接口中带有相关的信息参数

  • urls

    #在总urls做路由分发
    
  • models.py

    #定义模型表
    from django.db import models
    
    class Book(models.Model):
        name = models.CharField(max_length=32)
        price = models.IntegerField()
    
  • views

    #定义视图函数
    from .models import Book
    from .serializer import BookSerializer
    from rest_framework.viewsets import ModelViewSet
    
    
    class BookView(ModelViewSet):
        serializer_class = BookSerializer
        queryset = Book.objects.all()
    
  • serializer.py

    from rest_framework import serializers
    from .models import Book
    class BookSerializer(serializers.ModelSerializer):
        class Meta:
            model=Book
            fields='__all__'
    

原文地址:https://blog.csdn.net/2401_83569627/article/details/140689957

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!