DRF--Django RestFramework
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相关推荐
- DRF(django restframework)-数据库查询结果序列化
先看下手动序列化的 # -*- coding: utf-8 -*- from django.shortcuts import render# Create your views here. from ...
- Django restframework实现批量操作
这篇文章主要介绍两种方式实现批量操作, 一种是使用 Django restframework提供的装饰器action,可以更具实际情况扩展默认的增删改查操作,扩展性很好:另外一种是使用第三方模块 dj ...
- DRF (Django REST framework) 框架介绍
Web应用模式 在开发Web应用中,有两种应用模式: 前后端不分离 前后端分离 1 前后端不分离 在前后端不分离的应用模式中,前端页面看到的效果都是由后端控制,由后端渲染页面或重定向,也就是后端需要控 ...
- DRF (Django REST framework) 框架介绍(3)
DRF中的Request 与 Response 1. Request REST framework 传入视图的request对象不再是Django默认的HttpRequest对象,而是REST fra ...
- 【DRF+Django】微信小程序入门到实战_day04(上)
(0)摘要 # 课程链接 入门到实战,讲讲公司的微信小程序[django+drf+小程序实战]_哔哩哔哩_bilibili # 微信开发者文档 微信开放文档 # 课程内容 (1)P28_用户登录页面 ...
- Django restframework 认证
一.APIView类 在as_view()一文中,我们自定义的视图类继承自View类,但在restframework中有一个APIView类,它继承并丰富了View类. class APIView ...
- 【DRF+Django】微信小程序入门到实战_day03(下)
(0)摘要 # 课程链接 入门到实战,讲讲公司的微信小程序[django+drf+小程序实战]_哔哩哔哩_bilibili # 微信开发者文档 微信开放文档 # 课程内容 (1)P28_发送短信验证码 ...
- 【DRF+Django】微信小程序入门到实战_day01(下)
(0)摘要 # 课程链接 入门到实战,讲讲公司的微信小程序[django+drf+小程序实战]_哔哩哔哩_bilibili # 文档链接 微信开放文档 # 课程内容 (1)flex 布局 (2)fle ...
- DRF (Django REST framework) 中的视图类
视图说明 1. 两个基类 1)APIView rest_framework.views.APIView APIView是REST framework提供的所有视图的基类,继承自Django的View父 ...
- Django restframework之Token验证的缺陷及jwt的简单使用
一.主要缺陷: 1.Token验证是放在一张表中,即authtoken_token中,key没有失效时间,永久有效,一旦泄露,后果不可想象,安全性极差. 2.不利于分布式部署或多个系统使用一套验证,a ...
最新文章
- c# 三种异步编程模型EAP(*)、 APM(*)和 TPL
- 计算机的桌面教案,《认识计算机桌面》教案(4页)-原创力文档
- 2019届互联网校招本科薪酬清单
- 谈谈几个SpringCloud常见面试题及答案
- vue 打包后本地先自己启动服务 anywhere 非常好用
- example datasets in sklearn
- cmd52命令发送 mmc_乾坤合一~Linux SD/MMC/SDIO驱动分析
- 《鸟哥的Linux私房菜》第四版导学
- treetable怎么带参数_Layui实现TreeTable(树形数据表格)
- Python常用的软件包
- MySQL 5.7都即将停只维护了,是时候学习一波MySQL 8了
- 计算机视觉论文-2021-09-06
- 店盈通:如何打造赚钱的拼多多店铺?
- Vanishing gradient and activiation funcation(ReLU、Maxout)
- 请不要在Java项目中乱打印日志了,这才是正确姿势,非常实用!
- 知心王姐小饭桌 IM消息应用开发:一看看懂Protocol Buffer(协议篇)
- C语言结构体——位段概念的讲解
- [HEOI2012]采花(思维 + 离线 + 树状数组)
- 干货分享|一些好的数据分析、数据挖掘的网站或数据学习网站
- 猎头、培训与咨询的价值(2)【补1】——北漂18年(93)
热门文章
- 用VB6开发的软件: 天音听听
- Word编辑论文,实现1.题目、摘要、关键词为通栏,正文为双栏 2.首页底端添加通栏脚注,在脚注中写作者简介,并使其实现悬挂对齐效果
- 小论文,插入脚注(项目名称,作者简介)的方法!
- vue 实现商品列表的添加、删除,搜索
- unity 加载c++ dll文件提示DllNotFoundException的解决办法
- 如何实现消息功能_微信群管理软件如何加强消息管理?精细化管理怎么实现?...
- 基于DCF的跟踪算法综述
- 笔记:刘未鹏思考的技术与艺术(原“学会思考”)
- 北京航空航天二院电话面试
- 分散控制系统类有哪些最新发表的毕业论文呢?