首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

揭开DRF序列化技术神秘面纱

RESTful API,接口返回是JSON,JSON内容对应是数据库数据,DRF通过序列化(Serialization)技术,把数据模型转换为JSON,反之,叫做反序列化(deserialization...接着虚拟环境安装本文用到包: pip install django pip install djangorestframework pip install pygments # 代码高亮 创建项目...2个数据模型实例,所以这里只显示第2条数据。...CSRF token是指服务器通过token来认证,如果请求没有token或者token不匹配,那么就认为可能是CSRF而拒绝该请求。...序列化过程,就是模型实例→Python字典→JSON过程。通过本文也理解了appmodels.py→serializers.py→views.py→urls.py代码编写顺序。

66620
您找到你想要的搜索结果了吗?
是的
没有找到

Django REST Framework

创建三个模型:Student,Teacher, ClassRoom 创建序列化器 创建视图聚合 序列化 序列化: 把系统运行一些实例等转换成一种可直接表示出来格式,用来保存,传输等 反序列化: 序列化反操作序列化...把请求解析成一个request实例 属于DRF,跟djangoHttpRequest不太一样 得到Request之前有一个Parse对传入数据请求进行解析 data属性 请求数据体,类似于Django...request.POST, request.FILES DRF主要指的是Json query_params 所有传入关键字 api.tulingxueyuan.com...drf请求和反馈类会引发并处理APIExceptiondispatch之前,会进行身份验证,权限检查,流量控制支持属性有authentication_classes: 列表或者元祖,身份验证类...ViewSet 把一系列操作打包放入一个 list:GET retrieve:GET + id destroy:DELETE update:UPDATE create:POST

2.1K63

重点内容回顾-DRF

重点内容回顾-DRF 1. on_delete on_delete是定义模型类中外键一个选项。 on_delete选项指明是主表删除数据时候,对于外键引用表数据如何处理。...2. related_name related_name是定义模型类时,外键一个选项。它功能下面慢慢给大家分析一下。...w代表是写入权限,就是可以通过 touch等命令该目录下创建新文件。 x代表是执行权限,就是可以通过 cd命令进入这个目录等。...5.4.3序列化功能 将实例对象转换为字典数据: a.序列化单个对象。 b.序列化多个对象。(其实就是序列化单个对象基础上多加了一个参数many=True) c.关联对象嵌套序列化。...return value c.序列化器定义 validate方法进行补充验证(结合多个字段内容验证) def validate(self, attrs): # 此处attrs是一个字典类型数据

2.4K20

不会DRF?源码都分析透了确定不来看?

csrf_exempt(view)局部不验证,Django总结到了不懂可以看一下:CSRF 跨站请求伪造 快速使用DRF写出接口 序列化和反序列化 API接口开发,最核心最常见一个过程就是序列化,所谓序列化就是把数据转换格式...序列化: Django获取到数据默认是模型对象(QuerySet对象),但是模型对象数据无法直接提供给前端或别的平台使用,我们需要把数据进行序列化,变成字符串或json数据提供给前端或其他平台;...) # 把新request,放到了视图类对象,可以通过self调用新request和传入request是一个,因为放到了self self.request =...:前端POST提交数据,可以处理多种格式数据,无论前端传什么编码post提交数据都在data ps:原来提交数据request.POST里,有局限性只能处理urlencoded和formdata...import QueryDict 注意:如果前端提交过来多个同名数据也就是form表单input标签name属性设置了多个重名数据就不能使用request.POST.get('user')来获取了

1.3K10

DRF比Django认证和权限高在哪里

我们通过继续学习官网教程来进行了解。 更新model 首先修改Snippet模型,添加2个字段:owner,存储snippet创建者,highlighted,存储高亮HTML。...因为前面只给Snippet添加了owner字段,还没有写反序列化更新模型代码,所以通过请求访问视图,再尝试反序列化时候,报错了。...再请求一次: ? 刚才错误没有了,但是报了个新错误:Snippet.owner必须是User实例,给它赋值是AnonymousUser(匿名用户),导致ValueError了。...我们请求并没有用户信息,正常来说访问视图时候就该被拦截了。 给视图添加认证 我们需要让API更符合常规,让未认证用户不能执行视图中代码。...登录视图 如果用浏览器打开http://127.0.0.1:8000/snippets/,会发现只有GET方法没有POST,这是因为需要添加DRF登录视图,tutorial/urls.py添加rest_framework.urls

1.5K20

drf请求、响应、视图

如果前端请求未进行Accept声明,则会采用默认方式处理响应数据,我们可以通过配置来修改默认响应格式。 可以rest_framework.settings 查找所有的drf默认配置项。...APIView仍以常规类视图定义方法来实现get() 、post() 或者其他请求方式方法。例如使用APIView简单实现五个增删查改API接口。...提供关于序列化器使用属性与方法 属性:serializer_class  指明视图使用序列化器 方法: get_serializer_class(self) : 当出现一个视图类调用多个序列化器时...,那么可以通过条件判断get_serializer_class方法通过返回不同序列化器类名就可以让视图方法执行不同序列化器对象了。...试图中可以调用该方法获取详情信息模型类对象。**若详情访问模型类对象不存在,会返回404。

2.1K20

Django REST Framework-序列化器使用(二)

DRF,我们还可以使用序列化器进行反序列化。反序列化是将序列化格式(例如JSON)转换为Django模型过程。...例如,当我们从客户端接收POST请求时,我们需要将接收到JSON格式转换为Django模型,然后将其保存到数据库。使用序列化器,我们可以轻松地完成这个过程。...以下是一个简单反序列化器示例,用于将JSON格式转换为Django模型:from rest_framework import serializersfrom .models import Bookclass...create()方法将反序列化数据保存到数据库,而update()方法将反序列化数据更新到现有模型实例。...使用DRF序列化器,我们可以轻松地将Django模型转换为序列化格式,将序列化格式转换为Django模型,并验证和操作数据。

74921

接口文档如何去写?

一个创建用户例子:创建用户 这样组织原因 文档提供形式 DRF 自动生成接口文档 我们知道前后端分离,前端一般按后端写好接口去开发,那么就需要我们明细后端接口数据等,需要写接口文档,前端按照接口文档去开发...(generics.ListAPIView): """ 返回所有图书信息. """ 2)包含多个方法视图,类视图文档字符串,分开方法定义,如 class BookListCreateView...age=&gender= 数据模型定义 数据模型定义包括: 路径与查询字符串参数模型 请求体参数模型 响应体参数模型 数据模型最小数据集: 名称 是否必须 说明 “最小数据集”(MDS)是指通过收集最少数据...一个创建用户例子:创建用户 1 请求示例 // general POST http://www.testapi.com/api/user/vip/?...请在控制台修改最大创建人数 这样组织原因 请求示例: 请求示例放在第一位原因是,要用最快方式告诉开发者,这个接口应该如何请求 路径与查询字符串参数模型: 使用mustache包裹参数 请求体参数模型

1.3K10

第 9 篇:实现分类、标签、归档日期接口

Post创建日期(已去重),日期都是 Python date 对象,精确到月份,降序排列。...之前序列化字段都是序列化器(Serializer)里面使用,因为通常来说接口需要序列化一个对象多个字段。...用法也很简单,实例化序列化字段,调用其 to_representation 方法,将需要序列化值传入即可(其实序列化器序列对象多个字段时,内部也是分别调用对应序列化字段 to_representation...category,tags 两个过滤字段因为是 Post 模型定义字段,因此 django-filter 可以自动推断其过滤规则,只需要在 Meta.fields 声明即可。...由于这两个字段 Post 没有定义,Post 记录时间字段为 created_time,因此我们需要显示地定义查询规则,定义规则是: 查询参数名 = 查询参数值类型(查询模型字段,查询表达式

2.6K30

django 入门:通用视图类重构视图

def get_queryset(self): # 类视图中,从 url 捕获命名组参数值保存在实例 kwargs ,是一个字典 # 非命名组参数值保存在实例 args...实例 # 对应 post_detail 函数 post.increase_views() self.object.increase_views()...详情界面 有时候如果我们数据过多,同一页加载全部数据,用户体验肯定不好,我们通过通用视图类来创建分页,这边为了方便显示,我们会设置每页加载一篇文章 3 通过 ListView 创建分页 1.指定...3 print(page2.previous_page_number()) # 获取上一页页码 1 print(page2.start_index()) # 当前页第一个 item 列表位置...3 print(page2.end_index()) # 当前页最后一个 item 列表位置 4 最后附上整个项目的地址:blog_project https://github.com

86920

第 16 篇:别再手动管理接口文档了

接收参数(包括 URL 路径参数、查询参数;HTTP 请求参数;HTTP 请求体等参数)。 接口返回内容。..."pure_pagination", # 分页 "haystack", # 搜索 "drf_yasg", # 文档 ] 接着使用 drf_yasg 提供函数来创建一个 django...例如我们可以看到 GET /posts/{id}/ 这个接口响应参数,其中大部分有中文信息描述,我们可以推断,这些说明都是 drf-yasg 自动从定义 Post 模型各字段 verbose_name...原理是 drf-yasg 会尝试去解析接口对应序列化器(Serializer),从序列化器中提取出对应请求和响应字段(如果序列化器找不到,它会进一步去序列化器关联模型找),因此我们就可以给序列化器定义字段添加说明信息...除了序列化器(Serializer)、模型(Model)里面添加。

1.8K20

django-rest-framewor

2 解析器组件 (用来解析数据请求组件)   Django并不能处理请求协议为application/json编码协议数据   注意: DRF解析器会封装到Viewparsers内,视图函数被调用时...定义需要返回字段(字段类型可以与model类型不一致,参数也可以调整),字段名称必须与model一致 GET接口逻辑,获取QuerySet 开始序列化:将QuerySet作业第一个参数传给序列化类...,many默认为False,如果返回数据是一个列表嵌套字典多个对象集合,需要改为many=True 返回:将序列化对象data属性返回即可  {{ 实践代码 }} --post接口设计 url...定义:需要为post新增url,因为根据规范,url定位资源,http请求方式定义用户行为 定义post方法:视图类定义post方法 开始序列化:通过我们上面定义序列化类,创建一个序列化对象,传入参数...data=request.data(application/json)数据 校验数据:通过实例对象is_valid()方法,对请求数据合法性进行校验 保存数据:调用save()方法,将数据插入数据库

1.5K10

Django+Vue开发生鲜电商平台之11.首页、商品数量、缓存和限速功能开发

getBanner()方法,调用bannerGoods接口请求数据,请求数据再通过for循环展示出来。...3.商品系列分类展示功能 商品系列分类包括左侧导航栏和右侧商品列表,大类对应多个品牌、大类对应多个小类、大类对应多个商品,即包含3个一对多关系,定义序列化时需要嵌套定义。...为了创建brand时只显示一级类别,adminx.py定义GoodsBrandAdmin类时重写了get_context()方法,其中获取到category字段只取category_type为1数据...return goods_json class Meta: model = GoodsCategory fields = '__all__' 可以看到,定义了多个一对多关系和一个一对一关系...显然,已经实现了提交订单并付款后,销售量更新。 三、DRF缓存设置 1.使用drf-extensions配置缓存 在一般情况下,将一些经常访问数据放入缓存,可以加快网页响应速度。

2.2K10

Django REST Framework-信号

一、概述Django REST Framework(DRF信号(Signals)是一种非常有用机制,可以让我们某些重要事件发生时执行一些自定义代码。...二、什么是信号信号是Django一个概念,用于处理某些重要事件发生时执行自定义代码。DRF扩展了Django信号系统,添加了一些新信号,使我们可以更好地处理API相关事件。...DRF信号是基于Python标准库signal模块实现DRF信号通常用于以下情况:在对象创建、保存、删除等事件发生时执行某些操作。...在请求处理过程某些特定时间点执行某些操作,如请求前、请求后、异常处理等。DRF提供了多个信号,可以通过导入django.dispatch.Signal来访问这些信号。...当请求开始处理时,log_request函数将被调用。我们可以log_request函数记录请求日志,如请求时间、请求方法、请求路径等。

7.2K101

from django.db import models_django项目部署

:返回一个解析字典以便于Parser.parse()去解析,另外还通过Request对象添加了上下文request和encoding 第二句返回了一个Request对象,点击进入查看...接下来我们可以通过案例演示 案例演示 我们创建了TestView视图,视图函数打印了3个request属性,并且response上打了一个断点,接下来通过url访问视图,进入断点如下,...: {'a': ['1']}> 同样POST请求也是如此,我们视图中添加POST请求方式,如下: def post(self, request..._request就是原生WSGIRequest 原生request属性和方法都可以被drfrequest对象直接访问(兼容) drf请求所有url拼接参数均被解析到query_params,所有的数据包均被解析到...data 其中post请求,request.data兼容性最强,能兼容前台传输json格式数据 发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/166136.

26710

from django.db import models_独立团模块源码

:返回一个解析字典以便于Parser.parse()去解析,另外还通过Request对象添加了上下文request和encoding 第二句返回了一个Request对象,点击进入查看...接下来我们可以通过案例演示 案例演示 我们创建了TestView视图,视图函数打印了3个request属性,并且response上打了一个断点,接下来通过url访问视图,进入断点如下,...: {'a': ['1']}> 同样POST请求也是如此,我们视图中添加POST请求方式,如下: def post(self, request..._request就是原生WSGIRequest 原生request属性和方法都可以被drfrequest对象直接访问(兼容) drf请求所有url拼接参数均被解析到query_params,所有的数据包均被解析到...data 其中post请求,request.data兼容性最强,能兼容前台传输json格式数据 发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/165775.

26430

Django+Vue开发生鲜电商平台之5.使用DRF实现商品列表页和过滤

但是从代码可以看到: 通过新建列表、其元素为单个商品信息组成字典,一个一个地添加,显得很麻烦,可进行改进; 有些字段不能直接用json.dumps()方法序列化,如datetime,会报错,如商品列表视图修改为如下时...Django中有Form,也有ModelForm,DRF也有ModelSerializer,相比于Serializer,它省去了模型所有字段添加和处理数据方法实现,serializers.py简化如下...list()方法、post()请求转到create()方法,还执行一些其他默认操作,以后添加其他模型视图也直接添加一行代码router.register(r'xxx', XxxListViewSet)...方法内容POST,这意味着您可以访问PUT和PATCH请求内容; 它支持REST框架灵活请求解析,而不仅仅是支持表单数据。...DRF通过提供一个Response类来支持HTTP内容协商,该类允许您根据客户端请求返回可以呈现为多种内容类型内容。

5.3K20
领券