drf前戏与介绍

rf前期准备

web开发模式

  1. 前后端混合开发:模板渲染在后端完成
  2. 前后端分离:后端只负责写接口,前端来调用,通行使用json格式,多端(web,app)可以使用同一个接口

API接口

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

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

详细可以查看微博开放平台:https://open.weibo.com/wiki/2/users/show

restful规范

写接口的规范,大部分的接口都会按照这个规范去写(web API接口的设计风格)它首次出现在2000年Roy Fielding的博士论文中,一共10点

  1. 使用https协议进行数据传输(保证数据安全)

  2. URL中带关键字api

    https://api.baidu.com
    https://www.baidu.com/api
    
  3. URL中带版本信息

    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. 资源操作由请求方式决定

    -查询操作---get
    -新增操作----post
    -修改操作----put,patch
    -删除操作----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/zoos?limit=10:指定返回记录的数量
    https://api.example.com/v1/zoos?offset=10:指定返回记录的开始位置、
    https://api.example.com/v1/zoos?animal_type_id=1:指定筛选条件
    
  7. 响应中要带上状态码

    {
    status:200
    }

  8. 响应中带上错误信息

    {
        status:200
        msg: "无权限操作"
    }
    
  9. 针对不同操作返回结果的格式符合一定规范

    # 大概率都没有遵循
    GET /collection:返回资源对象的列表(数组)
    GET /collection/resource:返回单个资源对象
    POST /collection:返回新生成的资源对象
    PUT /collection/resource:返回完整的资源对象
    PATCH /collection/resource:返回完整的资源对象
    DELETE /collection/resource:返回一个空文档
    
  10. 返回的数据中带URL地址

    {
    "status": 0,
    "msg": "ok",
    "results":[
        {
            "name":"肯德基(罗餐厅)",
            "img": "https://image.baidu.com/kfc/001.png"
        }
    	]
    }
    

序列化

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

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

介绍安装drf

在使用drf是一定要记得注册 rest_framework 这个应用!!!!!

# Django Rest_Framework:是django的一个app,可以借助它快速在django框架开发出符合restful规范的接口
# 提供了:REST framework还提供了认证、权限、限流、过滤、分页、接口文档等功能支持
# 官方文档:https://www.django-rest-framework.org/
# github: https://github.com/encode/django-rest-framework/tree/master


# python  django的版本支持情况
Python(3.5、3.6、3.7、3.8、3.9)
Django (2.2, 3.0, 3.1)   2.x用的多,1.x老项目

django:1.x跟2.x没有大的区别
	3.x:支持异步,并不好,有人用3.x还是在写同步代码
    
    
#安装
	pip3 install djangorestframework
    # 注意:跟django版本对应好,django 2.2.2  drf最新

基于drf的5个接口

# 1 路由层
from rest_framework.routers import SimpleRouter
from app01 import views
router = SimpleRouter()
router.register('book', views.BookView)
urlpatterns = [
    #    path('admin/', admin.site.urls),
]
urlpatterns += router.urls

# 2 视图层
from rest_framework.viewsets import ModelViewSet
from .serizlizer import BookSerializer
from .models import Books
class BookView(ModelViewSet):
    queryset = Books.objects.all()
    serializer_class = BookSerializer
    
# 3 模型层
class Books(models.Model):
    name=models.CharField(max_length=32)
    price=models.IntegerField()
    publish=models.CharField(max_length=32)
    
# 4 序列化类,新建serializer.py
from rest_framework.serializers import ModelSerializer
from .models import Books
class BookSerializer(ModelSerializer):
    class Meta:
        model=Books
        fields='__all__'

posted @ 2021-07-20 21:37  zheng-sn  阅读(58)  评论(0)    收藏  举报