# 其实就是Django RESTful Framework

# RESTful一种API的命名风格,主要因为前后端分离开发出现

# 前后端分离: 用户访问静态文件的服务器,数据全部由ajax请求给到

# RESTful风格:数据应该是名词,而动词由HTTP的请求方式来体现

# RESTful风格的API给前端返回 结果对象,无论什么请求方式'''特点: 反复重复因为不论什么请求方式,都需要给前端返回对象内容,就是json格式的所以每次如果有查询的结果对象都需要遍历成字典,和flask相同如果不是get请求是带有内容的请求,那从前端接收的是json格式每次都需要从request.body中拿出内容,是bytes格式然后decode解码成json字符串然后再loads成可以给python处理的字典''''''说明:return JsonResponse(book_list, safe=False)

# 对safe的说明,我们传过去的book_list是一个list格式

# 在前端json支持{}格式也支持[]格式# 但是django中认为[]的json格式是不安全的会进行校验

# 所以把safe选项关闭False,不进行校验就可以传[]''''''序列化:对查询结果进行遍历,然后转成字典,给到JsonResponse反序列化:接收前端json处理成字典,然后校验''''''1.DRF框架工程搭建,建立在django的基础上安装DRF: pip install djangorestframework注册DRF: INSTALLED_APPS = ['rest_framework',]在子应用中serializers.py创建序列化器,用于执行序列化和反序列化在views中类视图使用序列化器,在urls中写地址''''''2.序列化器: serializer定义: 其实ModelSerializer是Serializer的子类,更方便有模型类的序列化器的创建,实际产生的序列化器如下class BookInfoSerializer(serializers.Serializer): 实际继承Serializer """图书数据序列化器""" 序列化器:执行序列化和反序列化 id = serializers.IntegerField(label='ID', read_only=True) read_only:只在输出响应中使用,就是给前端的时候,而前端给我们传请求的时候,不做验证 btitle = serializers.CharField(label='名称', max_length=20) bpub_date = serializers.DateField(label='发布日期', required=False) bread = serializers.IntegerField(label='阅读量', required=False) bcomment = serializers.IntegerField(label='评论量', required=False) image = serializers.ImageField(label='图片', required=False) 字段 : 跟模型类创建很相似,具体存在的字段见讲义 还有常用的参数(就是约束)使用: 创建对象 serializer = Serializer(instance=None, data=empty, **kwarg) 说明: 序列化时,将模型类对象传入instance参数 instance = 序列化对象 反序列化时,将要被反序列化的数据传入data参数 data = 反序列化对象 可通过context参数额外添加数据 即 **kwarg : context={'request': request} 通过Serializer对象的context属性获取''''''3.序列化操作 : 其实就是查询到对象之后,遍历构造字典的过程,而JsonResponse由内置的 Renderer渲染器来执行3-1.序列化只使用序列化器对象的第一个参数instanceserializer = BookInfoSerializer(instance = book)通过data属性可以获取序列化后的数据,这个data跟第二个参数可不是一个serializer.data# {'id': 2, 'btitle': '天龙八部', 'bpub_date': '1986-07-24', 'bread': 36, 'bcomment': 40, 'image': None}3-2.如果要被序列化的是包含多条数据的查询集QuerySet,添加many=True参数book_qs = BookInfo.objects.all()serializer = BookInfoSerializer(book_qs, many=True)serializer.data''''''4.关联对象嵌套序列化(由hero->book通过 hbook方法)4-1.hbook是个外键: PrimaryKeyRelatedFieldhbook = serializers.PrimaryKeyRelatedField(label='图书', read_only=True)因为是外键,第二个位置必须有read_only=True 或者 查询集 queryset=BookInfo.objects.all() 要不报错serializer.data 序列化的时候 结果是 关联对象的主键 {'hbook': 2} 即 book.id4-2.因为id不直观,想要详细内容的字符串,把外键字段改为 : StringRelatedFieldhbook = serializers.StringRelatedField(label='图书')结果: {'hbook': '天龙八部'}4-3.接口链接: HyperlinkedRelatedFieldhbook = serializers.HyperlinkedRelatedField(label='图书', read_only=True, view_name='books-detail')必须指明view_name参数,以便DRF根据视图名称寻找路由,进而拼接成完整URL 这个view_name传什么:url中有1个参数,是命名空间,是跟它关联 结果: {'hbook': 'http://127.0.0.1:8000/books/2/'}4-4.关联对象的指定字段数据 : SlugRelatedFieldhbook = serializers.SlugRelatedField(label='图书', read_only=True, slug_field='bpub_date')slug_field指明使用关联对象的哪个字段结果:{'hbook': datetime.date(1986, 7, 24)}4-5.使用关联对象的序列化器: 直接把所属book的所有内容序列化hbook = BookInfoSerializer()结果:{'hbook': OrderedDict([('id', 2), ('btitle', '天龙八部')te', '1986-07-24'), ('bread', 36), ('bcomment', 40), ('image', None)])}

---------------------

python drf_python DRF操作流程相关推荐

  1. python drf_python drf各类组件的用法和作用

    DRF组件的用法和作用 认证 自定义认证的类 """ from rest_framework.authentication import BaseAuthenticati ...

  2. python drf_python | DRF 框架知识总览

    DRF 框架 DRF 框架知识总览 接口(api) 什么是接口 定义 前台与后台进行信息交互的媒介 -- url链接 接口组成 url链接 - http://127.0.0.1:9000/api/us ...

  3. python drf_Python正课134 —— DRF 进阶1

    restful就是一个接口开发的约定俗成的开发规范.不局限于django或者drf,即便我们不使用drf,其实也能实现符合restful规范的api接口.同时,drf框架不是restful作者开发出来 ...

  4. python drf_Python学习————drf(一)

    drf学习 1 web开发模式 #前后端混合开发(前后端不分离):返回的是html的内容,需要写模板 #前后端分离:只专注于写后端接口,返回json,xml格式数据 # xml格式 lqz # jso ...

  5. 保利威(polyv)加密视频的使用详解---python(基于drf/vue)

    0. 注册账号,新人会免费用7天 polyv官网地址http://www.polyv.net/vod/ 一. 根据图片步骤,创建视频分类并上传测试视频 a.    b. c.  d.  二. 参数介绍 ...

  6. python drf_python-Django DRF更新用户

    我正在尝试使用Django-Rest-Framework(DRF)创建一个api来欺骗用户.我已经设法创建和读取用户,但是由于某种原因,更新将无法进行.似乎是它试图创建一个用户而不是更新它,因为它以& ...

  7. 树莓派小车python操作流程--龙邱科技

    ▌第一部分 环境解决 1.1 软件版本 发货前已经配置好软件环境: Linux raspberrypi 5.4.51 Python 3.7 OpenCV-python 3.4.6.27 1.2 TF卡 ...

  8. 网易易盾云图片(行为)验证码,网易验证码,前端vue后端python drf。前后分离

    网易易盾开通 官网相关链接: 网易易盾 在线体验:在线体验验证码 联系客服开通体验账户后,点击进入管理中心 添加产品,添加时:测试先随意起个名字,选择web. 准备开工 前端 Vue 官方接入文档在这 ...

  9. python文件打包技术免费教程

    需求:如何把python文件转化为像电脑软件一样可执行的程序? 技术:这就需要运用到python文件打包技术了.将python文件打包成exe文件,可以在电脑直接运行,也方便向小伙伴分享你的代码执行成 ...

最新文章

  1. swoole单台并发php,php swoole 并发多少?
  2. XP系统限制修改IP有新招
  3. linux下搭建mongodb副本集
  4. 绿盟防火墙配置手册_双链路环境下不同品牌防火墙更换案例分享
  5. day7——集合,深浅copy
  6. 计算机网络基础大学教材,《计算机网络技术及应用——大学计算机基础教育规划教材》低价购书_教材教辅考试_孔网...
  7. php 正则匹配收货地址,PHP简单实现正则匹配省市区的方法
  8. 大数据学习笔记30:搭建高可用Hadoop集群
  9. 汇编指令对应的机器码_汇编语言输出“welcome to you!”
  10. 获取本地ip地址 C#
  11. C/S系统实现两数求和(非阻塞+epoll+心跳包检测用户在线状况+滚动日志+配置文件.)...
  12. 【Python3爬虫】网易云音乐歌单下载
  13. arcpy 查看arcgis的产品类型、产品许可与安装信息
  14. 有效解决RaycastTarget勾选过多的烦恼
  15. android zenmode 通知,【Android系统】Android M ZenMode(禅模式)分析(2)
  16. matlab 对数函数表示,matlab对数函数怎么表示
  17. 大众点评优略点评。。
  18. Spring boot集成海康威视门禁设备
  19. 埃默里大学计算机科学排名,埃默里大学CS专业研究生排名,来试试你弄懂多少...
  20. 文件比较命令(comp)

热门文章

  1. ColorMatrix 5*5颜色矩阵
  2. 靶机渗透之Wakanda
  3. 打造自己的 APP「冰与火百科」(一):分析定位
  4. php必须安装什么才能运行,运行php需要什么?
  5. Zernike(泽尼克)转Seidel(赛德尔)系数(Zygo干涉仪功能)
  6. Switchbox系列 - Windows安装和使用
  7. Android系统的Ashmem匿名共享内存子系统分析(4)- Ashmem子系统的 Java访问接口
  8. bread是可数还是不可数_bread可数吗
  9. GoLang之使用sync.pool和sync.cond
  10. 用浅浅的幸福交换落寞的伤