1.环境安装与配置

DRF需要以下依赖:

  • Python (2.7, 3.2, 3.3, 3.4, 3.5, 3.6)

  • Django (1.10, 1.11, 2.0)

pip list -- 查看 Django 版本

DRF是以Django扩展应用的方式提供的,所以我们可以直接利用已有的Django环境无需从新创建。(若没有Django环境,需要先创建环境安装Django)

2.安装DRF

python 项目终端

pip install djangorestframework

3. settings.py 配置

# 添加'rest_framework'到您的INSTALLED_APPS设置中。

INSTALLED_APPS = [

...    'rest_framework',

]

4.什么是 ModelSerializer:

​ 序列化:一般是在数据库或者其他地方将数据读出来经过处理转成json结构返回给前端供其使用。

​ ModelSerializer 是对 serializers 的进一步封装;

5.eg:案例

`url.py`

from rest_framework import routers
from myApp.views import *urlpatterns = []router = routers.SimpleRouter(trailing_slash=False)
# 类别
router.register("category", CategoryView, basename="routers")
# 小类
router.register("subclass", SubclassView, basename="subclass")
urlpatterns += router.urls
print(urlpatterns)

`models.py`

from django.db import models
# Create your models here.# 类别
class CategoryModel(models.Model):title = models.CharField('标题', max_length=255)class Meta:db_table = 'category'ordering = ['id']# 小类
class SubclassModel(models.Model):title = models.CharField('标题', max_length=255)content = models.CharField('内容', max_length=255)# 类别外键  related_name='category_ref'category = models.ForeignKey(to=CategoryModel,on_delete=models.CASCADE)region = models.CharField('地区', max_length=255)class Meta:db_table = "subclass"

`serializers.py`

首先,我们需要了解正向查询和反向查询的概念

正向查询:使用有外键模型对象去查询没有外键的关联对象   模型对象.外键属性

反向查询:使用没有外键的模型对象去查询有外键的关联对象  模型对象.关联的模型类名_set

from rest_framework import serializers
from myApp.models import *# 种类嵌套序列化器子类
class CategorySerializerChild(serializers.ModelSerializer):class Meta:model = CategoryModel  # model  序列化的 模型"""fields 序列化的字段(要显示的字段)fields =   ('name',)  只显示该字段,注意  是个元组; fields  = ['name']  和 上面元组 意思一样"""fields = "__all__"# 小类嵌套序列化器
class SubclassSerializer(serializers.ModelSerializer):id = serializers.IntegerField(required=False)# 添加数据的时候使用; _id 是默认生成的小名, 在数据中可以查看。category_id = serializers.IntegerField(write_only=True)"""1. StringRelatedField在 models 中与 __str__ 魔法方法配合使用获取 类别的 title 类别标题category = serializers.StringRelatedField(read_only=True)2.PrimaryKeyRelatedField获取 主表 id 数据category = serializers.PrimaryKeyRelatedField(read_only=True)3. 嵌套序列化器 从表获取主表关联的数据集合 (正向查询)category = CategorySerializerChild(read_only=True)"""category = CategorySerializerChild(read_only=True)class Meta:model = SubclassModelfields = "__all__"# 小类 嵌套序列化器子类
class SubclassSerializerChild(serializers.ModelSerializer):class Meta:model = SubclassModelfields = "__all__"# 类别嵌套序列化器
class CategorySerializer(serializers.ModelSerializer):id = serializers.IntegerField(required=False)"""todo: 另外一种实现方式  在外键(ForeignKey)的定义中,我们可以通过设置related_name参数, 来覆盖名字subclassmodel_set (相当于别名的作用) 以起到相同的作用。1. model外键字段配合序列化器返回数据 category = models.ForeignKey( to=CategoryModel,on_delete=models.CASCADErelated_name='category_ref')2. 序列化器: category_ref = SubclassSerializer(read_only=True, many=True)"""# 嵌套序列化器 反向查询subclassmodel_set = SubclassSerializerChild(read_only=True, many=True)class Meta:model = CategoryModelfields = "__all__"

`views.py`

from django.shortcuts import render
from rest_framework import filters
from rest_framework.viewsets import ModelViewSet
from myApp.models import *
from myApp.serializers import *# 分页
from rest_framework.pagination import PageNumberPaginationclass MyPagination(PageNumberPagination):page_size = 5page_query_param = 'page'page_size_query_param = 'page_size'max_page_size = 10def get_paginated_response(self, data):return Response(OrderedDict([('count', self.page.paginator.count),('results', data)]))# 类别
class CategoryView(ModelViewSet):queryset = CategoryModel.objects.all()pagination_class = MyPaginationserializer_class = CategorySerializer# 模糊查询 filter_backends = [filters.SearchFilter]search_fields = ['id']# 小类
class SubclassView(ModelViewSet):queryset = SubclassModel.objects.all()serializer_class = SubclassSerializer

DRF--Django RestFramework相关推荐

  1. DRF(django restframework)-数据库查询结果序列化

    先看下手动序列化的 # -*- coding: utf-8 -*- from django.shortcuts import render# Create your views here. from ...

  2. Django restframework实现批量操作

    这篇文章主要介绍两种方式实现批量操作, 一种是使用 Django restframework提供的装饰器action,可以更具实际情况扩展默认的增删改查操作,扩展性很好:另外一种是使用第三方模块 dj ...

  3. DRF (Django REST framework) 框架介绍

    Web应用模式 在开发Web应用中,有两种应用模式: 前后端不分离 前后端分离 1 前后端不分离 在前后端不分离的应用模式中,前端页面看到的效果都是由后端控制,由后端渲染页面或重定向,也就是后端需要控 ...

  4. DRF (Django REST framework) 框架介绍(3)

    DRF中的Request 与 Response 1. Request REST framework 传入视图的request对象不再是Django默认的HttpRequest对象,而是REST fra ...

  5. 【DRF+Django】微信小程序入门到实战_day04(上)

    (0)摘要 # 课程链接 入门到实战,讲讲公司的微信小程序[django+drf+小程序实战]_哔哩哔哩_bilibili # 微信开发者文档 微信开放文档 # 课程内容 (1)P28_用户登录页面 ...

  6. Django restframework 认证

    一.APIView类 在​​as_view()一文中,我们自定义的视图类继承自View类,但在restframework中有一个APIView类,它继承并丰富了View类. class APIView ...

  7. 【DRF+Django】微信小程序入门到实战_day03(下)

    (0)摘要 # 课程链接 入门到实战,讲讲公司的微信小程序[django+drf+小程序实战]_哔哩哔哩_bilibili # 微信开发者文档 微信开放文档 # 课程内容 (1)P28_发送短信验证码 ...

  8. 【DRF+Django】微信小程序入门到实战_day01(下)

    (0)摘要 # 课程链接 入门到实战,讲讲公司的微信小程序[django+drf+小程序实战]_哔哩哔哩_bilibili # 文档链接 微信开放文档 # 课程内容 (1)flex 布局 (2)fle ...

  9. DRF (Django REST framework) 中的视图类

    视图说明 1. 两个基类 1)APIView rest_framework.views.APIView APIView是REST framework提供的所有视图的基类,继承自Django的View父 ...

  10. Django restframework之Token验证的缺陷及jwt的简单使用

    一.主要缺陷: 1.Token验证是放在一张表中,即authtoken_token中,key没有失效时间,永久有效,一旦泄露,后果不可想象,安全性极差. 2.不利于分布式部署或多个系统使用一套验证,a ...

最新文章

  1. c# 三种异步编程模型EAP(*)、 APM(*)和 TPL
  2. 计算机的桌面教案,《认识计算机桌面》教案(4页)-原创力文档
  3. 2019届互联网校招本科薪酬清单
  4. 谈谈几个SpringCloud常见面试题及答案
  5. vue 打包后本地先自己启动服务 anywhere 非常好用
  6. example datasets in sklearn
  7. cmd52命令发送 mmc_乾坤合一~Linux SD/MMC/SDIO驱动分析
  8. 《鸟哥的Linux私房菜》第四版导学
  9. treetable怎么带参数_Layui实现TreeTable(树形数据表格)
  10. Python常用的软件包
  11. MySQL 5.7都即将停只维护了,是时候学习一波MySQL 8了
  12. 计算机视觉论文-2021-09-06
  13. 店盈通:如何打造赚钱的拼多多店铺?
  14. Vanishing gradient and activiation funcation(ReLU、Maxout)
  15. 请不要在Java项目中乱打印日志了,这才是正确姿势,非常实用!
  16. 知心王姐小饭桌 IM消息应用开发:一看看懂Protocol Buffer(协议篇)
  17. C语言结构体——位段概念的讲解
  18. [HEOI2012]采花(思维 + 离线 + 树状数组)
  19. 干货分享|一些好的数据分析、数据挖掘的网站或数据学习网站
  20. 猎头、培训与咨询的价值(2)【补1】——北漂18年(93)

热门文章

  1. 用VB6开发的软件: 天音听听
  2. Word编辑论文,实现1.题目、摘要、关键词为通栏,正文为双栏 2.首页底端添加通栏脚注,在脚注中写作者简介,并使其实现悬挂对齐效果
  3. 小论文,插入脚注(项目名称,作者简介)的方法!
  4. vue 实现商品列表的添加、删除,搜索
  5. unity 加载c++ dll文件提示DllNotFoundException的解决办法
  6. 如何实现消息功能_微信群管理软件如何加强消息管理?精细化管理怎么实现?...
  7. 基于DCF的跟踪算法综述
  8. 笔记:刘未鹏思考的技术与艺术(原“学会思考”)
  9. 北京航空航天二院电话面试
  10. 分散控制系统类有哪些最新发表的毕业论文呢?