Django REST Framework
Django REST framework 框架是一个用于构建Web API 的强大而又灵活的工具(通常简称为DRF框架 或 REST framework)。
DRF框架是建立在Django框架基础之上,是一个二次开发的开源项目。
user_san
这个作者很懒,什么都没留下…
展开
-
DRF基本视图——高级过滤
具体需求说明:假设请求定义如下,参数bread__gt=100表示过滤出bread阅读量大于100的所有书本返回;请求方式:GET请求路径: /books/?bread__gt=100参考文档链接:drf官方文档:https://www.django-rest-framework.org/django-filter官方文档链接:https://django-filter.readthedocs.io/en/latest/index.html1、在views.py文件中,新建一个对应模原创 2020-09-25 21:48:26 · 433 阅读 · 0 评论 -
DRF基本视图——异常处理
核心结论:在DRF视图中,抛出DRF的异常,DRF框架会自行捕获并构建响应返回!思考:如果我想让drf框架,自行捕获非DRF异常,该怎么办呢?异常捕获处理流程图示:#mermaid-svg-sRo61A6brBp4E8i0 .label{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);fill:#333;color:#333}#mermaid-svg-sRo61A6brBp4E8i0 .原创 2020-09-25 20:12:00 · 378 阅读 · 0 评论 -
DRF基本视图——过滤、排序和分页
一、过滤针对获取列表资源接口(对视图函数self.list的查询集进行过滤);首先,需要安装第三方扩展包pip install django-filter其次,注册子应用,配置过滤后端INSTALLED_APP = [ # .... 'django_filters',]# REST_FRAMEWORK配置项对"drf接口"进行全局配置# 全局配置针对所有的drf视图(接口)REST_FRAMEWORK = { # ...... # 过滤后端,针对所有资源视图的self原创 2020-09-25 17:50:57 · 363 阅读 · 0 评论 -
DRF基本视图——视图集和路由
继承ModelViewSet(拥有基本视图类的所有方法)从它的源码可以看到,它不仅继承了五大拓展类,同时也继承了GenericViewSet而GenericViewSet又继承了ViewSetMixin(提供了自定义视图函数)通用视图类GenericAPIView(提供序列化和反序列化操作方法(查询集类属性、实例化序列化器类))...原创 2020-09-23 14:44:54 · 249 阅读 · 0 评论 -
DRF基本视图——认证、权限和限流
一、身份认证、权限检查在Django的配置文件settings.py文件中添加下列配置项:(1)配置Redis数据库(2)配置认证后端全局配置:(全局配置作用于DRF所有的视图)CACHES = { # 默认存储信息: 存到 0 号库 "default": { "BACKEND": "django_redis.cache.RedisCache", "LOCATION": "redis://192.168.203.153:6379/0",原创 2020-09-23 19:42:51 · 560 阅读 · 0 评论 -
DRF基本视图——继承五大子类
五大子类:(1)ListAPIView(2)CreateAPIView(3)RetrieveAPIView(4)UpdateAPIView(5)DestroyAPIView为什么继承五大子类?拿ListAPIView子类举例,如下源码,我们只需继承ListAPIView子类,而ListAPIView又继承拓展类——ListModelMixin(已经完成序列化和反序列化操作),——ListAPIView帮助我们完成了响应的返回操作,所以我们只需:1、自定义一个类,2、再定义所需要的类属性即可原创 2020-09-22 21:18:32 · 262 阅读 · 0 评论 -
DRF基本视图——继承五大拓展类视图
哪五大拓展类视图?见文章DRF基本视图——继承APIView继承原因:继承五大拓展类视图,可以获得各自封装好的序列化和反序列化操作的方法获取列表资源list(request)新建单一资源self.create(request)获取单一资源self.retrieve(request, pk)全更新单一资源self.update(request, pk)部分更新单一资源self.partial_update(request, pk)删除单一资源self.destroy(request, p.原创 2020-09-22 20:52:11 · 217 阅读 · 0 评论 -
DRF基本视图——继承GenericAPIView
1、获取列表资源 —— 序列化返回多个模型类对象继承自GenericAPIView,它提供了下面的方法:self.get_queryset():获取查询集;需指定哪个模型类(定义类属性 queryset =)self.get_serializer():实例化序列化器对象;需指定哪个序列化器(定义类属性serializer_class =)from rest_framework import statusfrom rest_framework.generics import GenericAPI.原创 2020-09-22 19:41:11 · 195 阅读 · 0 评论 -
DRF基本视图——继承APIView
1、DRF基本视图继承关系简图代码实现1、获取列表资源——序列化返回多个模型类对象3、获取单一资源——序列化返回单一模型类对象:查询字符串方式/books/?keyword=传request.query_params用于提取查询字符串参数注:函数chain(value1,value2,…):用来合并多个查询集from itertools import chainfrom rest_framework.response import Responsefrom rest_framewor原创 2020-09-22 17:58:06 · 346 阅读 · 0 评论 -
模型类序列化器
引入:自定义的序列化器需要我们自己去手动创建每一个字段(太繁琐),模型类序列化器可以帮助我们省去这个繁琐步骤模型类序列化器帮助我们完成了2件事:(1)、根据指定的规则,自动映射字段参与序列化/反序列化;(2)、重写了create和update方法实现模型类对象的新建和更新逻辑;"""模型类序列化器serializers.ModelSerializer: 模型类序列化器基类""""""模型类序列化器serializers.ModelSerializer: 模型类序列化器基类"""原创 2020-09-20 21:26:43 · 265 阅读 · 0 评论 -
自定义序列化器(反序列化操作)
1、反序列化操作之校验1.1、标准校验操作流程(1)、获取前端传参(字典)book_info = {"btitle": "三体", "bpub_date": "1999-9-9"}(2)、实例化序列化器对象bs = BookInfoSerializer(data=book_info)data参数指定被校验的字典数据(3)、启动校验流程bs.is_valid(): 默认通过返回值为True或False表示校验成功或者失败;is_valid(raise_exception原创 2020-09-20 14:38:37 · 937 阅读 · 0 评论 -
自定义序列化器(序列化操作)——两个方向,三种形式(对应三种方案实现)
1、自定义序列化器:(1)、定义一个BookInfo模型类的序列化器 —— 用来序列化/反序列化操作BookInfo模型类对象的(2)、通过定义和模型类“同名类属性、类型一一对应”的形式,来指定参与序列化的字段(3)、模型类隐藏字段也可以映射 —— 只要模型类有的字段都可以映射新建一个serializers.py文件from rest_framework import serializers# serializers.Serializer: 该类,是所有自定义序列化器的基类# 1、定义一原创 2020-09-19 21:25:37 · 1214 阅读 · 0 评论 -
序列化的概念
DRF框架定义的序列化(狭义上)1.1、DRF的序列化流程模型类对象 --> 字典 --> Json字符串1.2、DRF的反序列化流程Json字符串 —> 字典 —> 数据校验—> 有效数据 —> 新建/更新模型类对象示例:数据库的查 --> 序列化数据库的增删改 --> 反序列化2、广义上的序列化定义相同的数据在不同的表现形式之间的转化,称之为序列化;反序列化是与序列化相对的相反的过程。...原创 2020-09-19 19:27:51 · 1013 阅读 · 0 评论 -
DRF工程环境安装搭建
前提:配置好Django工程的环境下1、在pycharm的终端Terminal中安装DRFpip install djangorestframework2、在Django的配置文件settings.py的INSTALLED_APPS中添加’rest_framework’INSTALLED_APPS = [ ... 'rest_framework',]...原创 2020-09-19 19:13:19 · 163 阅读 · 0 评论