DjangoRestFramework基本工程

卫诚
2023-12-01

前言

这几年一直在it行业里摸爬滚打,一路走来,不少总结了一些python行业里的高频面试,看到大部分初入行的新鲜血液,还在为各样的面试题答案或收录有各种困难问题

于是乎,我自己开发了一款面试宝典,希望能帮到大家,也希望有更多的Python新人真正加入从事到这个行业里,让python火不只是停留在广告上。

微信小程序搜索:Python面试宝典

或可关注原创个人博客:https://lienze.tech

也可关注微信公众号,不定时发送各类有趣猎奇的技术文章:Python编程学习

DRF工程

drf工程搭建

安装***DRF***框架

pip install djangorestframework -i https://pypi.tuna.tsinghua.edu.cn/simple

配置 settings

INSTALLED_APPS = [
  ...
  'rest_framework',
]

drf官方文档导读

这个框架提供了如下功能,让我们的代码风格更加统一,而且让你的开发工作成本更低,这个框架封装了很多很多复用的功能

  • 将请求的数据转换为模型类对象
  • 操作数据库
  • 将模型类对象转换为响应的数据如***JSON***格式

  • 视图封装:***DRF***统一封装了请求的数据为***request.data***以及返回数据的***Response***方法
  • 序列化器DRF提供了序列化器可以统一便捷的进行序列化反序列化**工作
  • 认证:对用户登陆进行身份验证
  • 权限:对用户权限进行认证,超级用户、普通用户、匿名用户啥的
  • 限流:对访问的用户流量进行限制减轻接口的访问压力
  • 过滤:可以对列表数据进行字段过滤,并可以通过添加***django-fitlter***扩展来增强支持
  • 排序:来帮助我们快速指明数据按照指定字段进行排序
  • 分页:可以对数据集进行分页处理
  • 异常处理:**DRF提供了异常处理,我们可以自定义异常处理函数
  • 接口文档生成:***DRF***还可以自动生成接口文档

序列化器类视图,也是***DRF***提供的主要功能,也是我们学习的重心,也是 WEB 主要的两件事


基本视图

在drf框架中,已经封装了一款更为便捷进行接口编写的视图基类APIView,大多数情况下,都会使用这个基类进行业务视图的代码编写

Request请求

.data

DRF***将***request.POST、***request.FILES***的数据统一封装到了***data***属性中,其中包含了

  • 解析之后的文件非文件数据

  • 对***POST***、PUT、**PATCH请求方式解析后的数据

  • 表单类型数据、***JSON***类型数据

from rest_framework.views import APIView
class ExampleView(APIView):
  def post(self, request):
      data = request.data # json/form 提交的数据
      return Response({'received data': request.data})

.query_params

DRF为了更准确的表示这是从连接里取得数据,从而把***request.GET***的名字更换为了***request.query_params*,其余操作与**request.GET一样,这里只是拼写更换

from rest_framework.views import APIView
class ExampleView(APIView):
    def get(self, request):
        data = request.query_params # get 的连接传参
        return Response({'received data': request.query_params})

Response返回

目前在***DRF***中,我们所使用最多的就是**Response这个方法,经常使用已经序列化好的数据结合***Response***返回

Response(data=None, status=None, template_name=None, headers=None, exception=False, content_type=None)
'''
data: 需要返回的数据
status: 状态码
headers: 头部信息
content-type: 返回数据 MIME 类型,一般不要多余设置,drf 会自动根据数据进行设置
'''

需要注意的是,在***Response*函数的第一个参数位置上,这个data不能是复杂结构的数据,比如ORM查询到的数据,ORM的数据需要提取出来成为Python的数据类型或者使用序列化方式将其加工才可以使用***Response***尽心返回

常见状态码

200 OK - [GET] # 服务器成功返回用户请求的数据
201 CREATED - [POST/PUT/PATCH] # 用户新建或修改数据成功。
202 Accepted - [*] # 表示一个请求已经进入后台排队(异步任务)
204 NO CONTENT - [DELETE] # 用户删除数据成功。
 类似资料: