# 其实就是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操作流程的更多相关文章

  1. python DRF获取参数介绍

    DRF获取参数的方式 例如url url(r'^demo/(?P<word>.*)/$', DemoView.as_view()) 在类视图中获取参数 url:http://127.0.0 ...

  2. python drf+xadmin+react+dva+react-native+sentry+nginx 搭建前后端分离的博客完整平台

    前言: 经过差不多半年的开发,搭建从前端到服务器,实现了前后端分离的一个集PC端.移动端的多端应用,实属不易,今天得空,好好写篇文章,记录这些天的成果.同时也做个分享. 演示网站地址: http:// ...

  3. linux (01) linux基础

    一.了解linux 都有哪些职位 机房运维 负责服务器的上下架 桌面运维 专业修电脑 修打印机 系统管理员 负责liunux操作系统的维护 运维开发  linux +  python  把平时自己手敲 ...

  4. python 全栈开发,Day104(DRF用户认证,结算中心,django-redis)

    考试第二部分:MySQL数据库 6.  MySQL中char和varchar的区别(1分) char是定长,varchar是变长. char的查询速度比varchar要快. 7.   MySQL中va ...

  5. python 全栈开发,Day101(redis操作,购物车,DRF解析器)

    昨日内容回顾 1. django请求生命周期? - 当用户在浏览器中输入url时,浏览器会生成请求头和请求体发给服务端 请求头和请求体中会包含浏览器的动作(action),这个动作通常为get或者po ...

  6. python 全栈开发,Day99(作业讲解,DRF版本,DRF分页,DRF序列化进阶)

    昨日内容回顾 1. 为什么要做前后端分离? - 前后端交给不同的人来编写,职责划分明确. - API (IOS,安卓,PC,微信小程序...) - vue.js等框架编写前端时,会比之前写jQuery ...

  7. python 全栈开发,Day97(Token 认证的来龙去脉,DRF认证,DRF权限,DRF节流)

    昨日内容回顾 1. 五个葫芦娃和三行代码 APIView(views.View) 1. 封装了Django的request - request.query_params --> 取URL中的参数 ...

  8. python 全栈开发,Day95(RESTful API介绍,基于Django实现RESTful API,DRF 序列化)

    昨日内容回顾 1. rest framework serializer(序列化)的简单使用 QuerySet([ obj, obj, obj]) --> JSON格式数据 0. 安装和导入: p ...

  9. DRF基础操作流程

    Django Rest_Framework 核心思想: 缩减编写api接口的代码 -->DRF Django REST framework是一个建立在Django基础之上的Web 应用开发框架, ...

随机推荐

  1. Fragment的onCreateView和onActivityCreate之间的区别(转)

    看了有关这个问题的几篇博文,几乎都是引用了stackoverflow上的一个回答: 问题: I know that a fragment’s view hierarchy has to be infl ...

  2. 『Re』正则表达式模块_常用方法记录

    『Re』知识工程作业_主体识别 一个比较完备的正则表达式介绍 几个基础函数 re.compile(pattern, flags=0) 将正则表达式模式编译成一个正则表达式对象,它可以用于匹配使用它的m ...

  3. 内存池、进程池、线程池介绍及线程池C++实现

    本文转载于:https://blog.csdn.net/ywcpig/article/details/52557080 内存池 平常我们使用new.malloc在堆区申请一块内存,但由于每次申请的内存 ...

  4. Leetcode 999. 车的可用捕获量

    999. 车的可用捕获量  显示英文描述 我的提交返回竞赛   用户通过次数255 用户尝试次数260 通过次数255 提交次数357 题目难度Easy 在一个 8 x 8 的棋盘上,有一个白色车(r ...

  5. 函数使用十一:FTP

    网上很多FTP说明的文档,也很详细,写这玩意是备份一下: 注:有的系统需要配置FTP地址和端口,有的好像没有... SM30->SAPFTP_SERVERS_V,默认端口21. 在做之前可以做个 ...

  6. Nginx+Tomcat集群配置

    Nginx+Tomcat集群配置 一台虚拟机作为Nginx服务 两太虚拟机配置Tomcat+jdk环境 Nginx测试 启动: cd usr/local/nginx/sbin ./nginx ---& ...

  7. textarea标签内的文字无缘故居中解决原因

    <textarea> 内容内容 </textarea> 浏览器会解析为 <textarea><br>     内容内容</textarea> ...

  8. 小程序证书申请FAQ

    1. 帮别人开发小程序, 先把你的微信号加到成员里, 并给予开发者权限,体验者权限,登录,数据分析,开发管理,开发设置 2. 需要https, 不能用windows2003,必须2008以上,用IIS ...

  9. SpringBoot的日志

    1.日志框架小张:开发一个大型系统:1.System.out.pringtln("");将关键数据打印在控制台:去掉?写在一个文件?2.框架来记录系统的一些运行信息:日志:zhan ...

  10. Nginx的Access日志记录的时机

    想当然了,所以犯了一个低级的错误... nginx的access访问日志可以记录下访问到nginx的相关信息.包含请求地址,请求路径,返回码,请求的处理时间等信息.. 然后问题来了,这个日志是什么时候 ...