Drf框架

一丶API接口

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

# 目前市面上大部分公司开发人员使用的接口服务架构主要有:restful、rpc。
# restful:翻译成中文,即 资源状态转换
# 1.把后端所有的数据/文件都看成资源
POST http://www.lufei.com/api/students/ 添加学生数据 GET http://www.lufei.com/api/students/ 获取所有学生 DELETE http://www.lufei.com/api/students/<pk> 删除1个学生 GET http://www.lufei.com/api/students/<pk> 获取一个学生

二丶序列化

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

### 序列化 :  把我们识别的数据转换成指定的格式提供给别人。
例如:我们在django中获取到的数据默认是模型对象,但是模型对象数据无法直接提供给前端或别的平台使用,所以我们需要把数据进行序列化,变成字符串或者json数据,提供给别人。 ### 反序列化 : 把别人提供的数据转换/还原成我们需要的格式。
例如:前端js提供过来的json数据,对于python而言就是字符串,我们需要进行反序列化换成模型类对象,这样我们才能把数据保存到数据库中。 # 总结:
接收数据[反序列化] 操作数据 响应数据[序列化]

三丶Django Rest Framework

# 核心思想: 缩减编写api接口代码
# 建立在Django基础之上的Web应用开发框架. 可以快速开发的REST API接口应用.
# 在 REST framework 中, 提供了序列化器Serializer的定,帮助我们简化序列化的过程
# 还提供丰富的类视图、扩展类、视图集来简化视图的编写工作.
# REST framework 还提供了:认证 , 权限 ,过滤 ,分页 ,接口文档等功能支持.
# 特点:
提供了定义序列化器Serializer的方法,可以快速根据Django ORM或者其他自动序列化/反序列化
提供丰富的视图类,Mixin扩展类,简化视图的编写
丰富的定制层级:函数视图,类视图,视图集合到自动生成API
多种身份认证和权限认证方式支持: jwt
内置了限流系统
直观的API web界面
插件,

四丶流程

### 序列化器
# 在子应用中穿件seriaizers.py用于保存序列化器 # 创建序列化器类,回头会在试图中被调用
from rest_framework import serializers
from .models import Student class StudentModelSerializer(serializers.ModelSerializer):
class Meta:
model = Student
fields = "__all__" # model 指定序列化器处理的数据字段从模型类Student参考生成
# fields 指明该序列化器包含模型类中的哪些字段 'all' 全字段
### 视图函数
from rest_framework.viewsets import ModelViewSet
from .models import Student
from .serializers import StudentModelSerializer
# Create your views here.
class StudentViewSet(ModelViewSet):
# 查询 模型数据
queryset = Student.objects.all()
# 指定 序列化器类
serializer_class = StudentModelSerializer
# queryset 指名该视图集在查询数据时使用的查询集
# serializer_class 指明该视图在进行序列化反序列化使用的序列化器
### 路由定义
from . import views
from rest_framework.routers import DefaultRouter # 路由列表
urlpatterns = [] router = DefaultRouter() # 可以处理视图的路由器
router.register('students', views.StudentViewSet) # 向路由器中注册视图集 urlpatterns += router.urls # 将路由器中的所以路由信息追到到django的路由列表中

最新文章

  1. 函数式Android编程(II):Kotlin语言的集合操作
  2. CSS3学习内容与心得
  3. Types of Learning
  4. Java中StringBuilder的清空方法比较
  5. Java 应用性能调优实践
  6. codevs 1163 访问艺术馆
  7. Linux下打开串口设置
  8. HNOI2002
  9. BZOJ-2929 洞穴攀岩 最大流Dinic(傻逼题)
  10. iOS - UINavigationController
  11. IOS 中runtime 不可变数组__NSArray0 和__NSArrayI
  12. 校省选赛第一场A题Cinema题解
  13. hadoop配置遇到问题的解决
  14. C#设计模式(16)——中介者模式
  15. centos 6 部署Nodejs
  16. Hibernate 再接触 性能优化
  17. 3.sql2008查询
  18. 4月12 php练习
  19. 2019 front-end web trending
  20. webpack4 优化记录

热门文章

  1. Android框架Volley使用:Json请求实现
  2. Prometheus+Grafana监控MySQL、Redis数据库
  3. jira Licenses更新步骤
  4. 渗透测试学习 二十二、getshell总结
  5. 在Rust中使用C语言的库功能
  6. RabbitMQ学习笔记(二、RabbitMQ结构)
  7. python爬虫之深度爬取实例
  8. BASIC合集
  9. Appium自动化WebView中元素的操作
  10. Vue的模板语法(四)