在RESTful API中,接口返回的是JSON,JSON的内容对应的是数据库中的数据,DRF是通过序列化(Serialization)的技术,把数据模型转换为JSON的,反之,叫做反序列化(deserialization...本文就来揭开DRF序列化技术的神秘面纱。...serializer.data返回的是个字典,最后把字典转换为JSON: content = JSONRenderer().render(serializer.data) content # b'{"id...反序列化的过程是类似的,先把JSON转换为Python字典: import io stream = io.BytesIO(content) data = JSONParser().parse(stream...序列化的过程,就是模型实例→Python字典→JSON的过程。通过本文也理解了在app中models.py→serializers.py→views.py→urls.py的代码编写顺序。
DRF框架学习(三) 1.视图 1.1作用 1.控制序列化器的执行(数据检验、数据保存、转换数据(序列化操作)) 2.控制数据库的查询操作。...lookup_url_kwarg指定从查询集获取对象时,从url地址中提取的参数的名称。 注意:经常配合Minxin扩展类来使用。...1.3.1扩展类5个详解 DRF框架提供了5个扩展类,封装了通用增删改查的流程。...成功返回200,序列化器校验数据失败时,返回400错误。...GenericViewSet就帮助我们完成了这样的继承工作,继承自 GenericAPIView与 ViewSetMixin,在实现了调用as_view()时传入字典(如 {'get':'list'})
1.3一个程序注意的点 1.3.1视图函数的定义 1)定义视图函数之后,要有一个request形参接收请求对象。...,并返回 2.将前端发送的数据反序列化为模型类对象,并保存到数据库中 2.4DRF框架 2.4.1作用:大大提高RestAPI接口开发效率 2.5序列化器Serializer 2.5.1功能 进行数据的序列化和反序列化...:DRF框架中所有序列化器的父类,定义序列化器类时,可以直接继承此类 # serializers.ModelSerializer:Serializer类的子类,在父类的基础上,添加一些功能 class...=,**kwargs) 2.5.3序列化功能 说白了就是将实例对象转换为字典数据 1)序列化单个对象 book = BookInfo.objects.get(id=1) serializer =..._str_方法的返回值 hbook = serializers.StringRelatedField(label='图书') 注意:和对象关联的对象如果有多个,在序列化器中定义嵌套序列化字段时,需要添加
Serializer 在 DRF 中负责:序列化:将模型实例/Python 对象 → 转换为 JSON等格式反序列化:将客户端传入的数据 → 转换为 Python 对象 → 再保存到数据库数据验证:检查输入数据是否符合业务规则...基础用法3.1 序列化(对象 → 字典)# 单个对象序列化user = User.objects.get(id=1)serializer = UserSerializer(user)serializer.data...= UserSerializer(users, many=True)print(serializer.data)3.2 反序列化(字典 → 对象)data = {'username': 'alice'...read_only=True) # 用户只能读取,无法提交json修改 password = CharField(write_only=True) # 用户只能写入,程序不会响应给用户...常见问题Q1: serializer.data 返回空字典?检查是否忘记调用 is_valid()确认字段是否被标记为 write_only=TrueQ2: 如何处理部分更新?
它是 DRF 中通用视图和视图集的基础,提供了查询、序列化、分页等常用操作的标准实现。本质上它是 DRF 中所有通用视图(如 ListAPIView、RetrieveAPIView 等)的基础。二....DRF 生态系统集成 - 与 DRF 的其他组件(如序列化器、权限等)无缝协作三....def get(self, request): queryset = self.filter_queryset(self.get_queryset()) # 执行分页...if end_date: queryset = queryset.filter(created_at__lte=end_date) # 执行聚合查询...return Response(serializer.data)工作原理当收到 GET 请求时,视图调用 get 方法get 方法首先调用 self.get_queryset() 获取基础查询集然后调用
,所以我们需要把python语言转换为通用的json格式的数据,在django中就是将orm模型或者queryset对象转换成字典,再由字典转换成json,整个过程就是序列化。 ...当用户通过在form表单中填写的数据,发送请求给后端,将数据提交给后端数据库,这个过程就是反序列化。反序列化的时候,我们需要去验证前端提交的数据是否符合后端制定的规范,符合才进行入库。...drf的序列化类 drf的序列化类有3个 Serializer ModelSerializer(使用最多的) ListSerializer 我们使用最多的就是ModelSerializer,这三个序列化类都继承自...saved model instance. " "For example: 'serializer.save(owner=request.user)'.'" ) # 访问serializer.data...'`create()` did not return an object instance.' ) return self.instance 发布者:全栈程序员栈长
2.明确RestAPI接口实现时的主要工作 2.1序列化&反序列化 把程序中的数据结构类型转换为其他格式的数据,这个过程叫做序列化的过程 例:将模型类对象转换为字典或者json数据的过程,就叫做序列化的过程...把其他格式的数据转换为程序中数据结构类型,这个过程叫做反序列化的过程。 例:将前端传递的数据保存到模型对象中的过程,叫做反序列化过程。...3.2见识DRF的魅力 我们仍以在学习Django框架时使用的图书英雄为案例,使用Django REST framework快速实现图书的REST API。 3.2.1....:DRF框架中所有序列化器的父类,定义序列化器类时,可以直接继承此类 serializers.ModelSerializer:是Serializer的子类,在父类基础上,添加了一些功能 序列化器类语法:...heroinfo_set = serializers.PrimaryKeyRelatedField(read_only=True, many=True) 2)使用指定的序列化器将关联对象进行序列化(字典套字典的显示方式
在Django rest Framework入门 二 :DRF框架初体验中其实已经使用了视图了(book.views里面的代码),而且就是实际开发中最常用的模式,但是那是经过DRF框架高度封装的,代码的可读性不好...,而且如果不了解里面的细节,当以后遇到需要定制化的工作时可能就无从下手,这一篇笔记会记录一些我自己认为比较重要切常用的实现细节。...queryset = BookInfo.objects.all() # 指定可以作用的数据范围 serializer_class = BookInfoSerializer # 指定序列化器...', 'put':'update', 'delete':'delete'})) ] + router.urls ``` 可以看到在与Django中不同的是,在视图类的as_view方法中添加了一个字典参数...,字典中的内容是HTTP请求方法和对应的函数名的键值对。
文章目录 一、DRF框架之序列化器的使用 1.设置新环境 2.创建新项目 3.创建模型类 4.创建序列化程序类 5.使用序列化程序 6.使用模型序列化程序 7.使用我们的序列化程序编写常规 Django...视图 一、DRF框架之序列化器的使用 1.设置新环境 在我们做任何其他事情之前,我们将使用venv创建一个新的虚拟环境。...当我们开始编写使用序列化程序的视图时,这种相似性应该变得更加明显。 我们还可以序列化查询集而不是模型实例。...为此,我们只需向序列化程序参数添加一个标志即可many=True serializer = SnippetSerializer(Snippet.objects.all(), many=True) serializer.data...fields = ['id', 'title', 'code', 'linenos', 'language', 'style'] 序列化程序具有的一个很好的属性是,您可以通过打印序列化程序实例的表示形式来检查序列化程序实例中的所有字段
其中一个核心概念是序列化器,它允许我们将Django模型转换为序列化的格式(例如JSON,XML等),并反之亦然。什么是序列化器?序列化器是DRF中的一个核心概念。...它们允许我们将Django模型转换为序列化的格式,并反之亦然。例如,我们可以使用序列化器将Django模型转换为JSON格式,以便我们可以将其发送到前端应用程序。...序列化器还可以帮助我们验证输入数据,并确保数据的有效性。定义序列化器在DRF中,我们使用序列化器类来定义序列化器。...序列化器类继承自DRF提供的Serializer或ModelSerializer类,具体取决于我们是否要序列化Django模型。...: users = User.objects.all() serializer = UserSerializer(users, many=True) return Response(serializer.data
大家好,又见面了,我是你们的朋友全栈君 DRF图片默认序列化目录格式一般为media/xxx.png,但这不是url,没法直接访问,在前端还需要进行一次字符串拼接,十分麻烦。...serializer = CategorySerializer(category) return Response(serializer.data, status=status.HTTP_200_OK)...如上面的代码,此时如果CategorySerializer中有图片资源,那么序列化出来就会是这种形式:media/web/6/img/10b5319a.jpg 若要改成url格式的话,需做如下修改:...serializer = CategorySerializer(category, context={'request': request}) return Response(serializer.data...发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/190776.html原文链接:https://javaforall.cn
仅能返回json格式的数据,其他类型不支持 列表页视图没有分页,过滤,排序功能 Django REST framework 在Django框架基础上,进行二次开发 用于构建Restful API 简称为DRF...框架或REST freamwork框架 特性 提供了强大的Serializer序列化器,可以高效地进行序列化与反序列化操作 提供了丰富的类视图,Mixin扩展类,ViewSet视图集 提供了直观的Web...2.通过序列化器ProjectSerializer对象的data属性,就可以获取转化后的字典 from projects.serializer import ProjectSerializerclass...) raise_exception=True校验失败会抛出异常 当调用 is_valid方法后,才可以调用 errors属性,获取校验的错误提示「字典格式」 class ProjectsList(View...其他字段默认即可以进行序列化输出,也可以反序列化输出 write_only=True和 read_only=True相反,只支持反序列化,不支持序列化。
BookInfo.objects.all() serializer = BookInfoSerializer(books, many=True) return Response(serializer.data...status=status.HTTP_404_NOT_FOUND) serializer = BookInfoSerializer(books) return Response(serializer.data...) 在设置路由时,我们可以如下操作 urlpatterns = [ url(r'^books/$', BookInfoViewSet.as_view({'get':'list'}), url...ViewSet主要通过继承ViewSetMixin来实现在调用as_view()时传入字典(如{‘get’:‘list’})的映射处理工作。...GenericViewSet就帮助我们完成了这样的继承工作,继承自GenericAPIView与ViewSetMixin,在实现了调用as_view()时传入字典(如{‘get’:‘list’})的映射处理工作的同时
0x00 引言 本篇对drf中的mixins进行简要的分析总结。 Mixins在drf中主要配合viewset共同使用,实现http方法与mixins的相关类与方法进行关联。...instance.course course.fav_num += 1 course.save() 显然,这不是唯一的解决方法,我们还可以在seriliazer进行设置,我们还可以使用drf...page = self.paginate_queryset(queryset) if page is not None: # 分页不为空,那么不能简单的执行...Response(serializer.data) # 还需要将相关的page信息序列化在进行响应 serializer = self.get_serializer...一般情况下,当我们在操作某一个model的时候,涉及到另外一个model中数据的修改,那么就需要对这个mixins下执行save的逻辑的方法进行重写。 参考
本篇对drf中的mixins进行简要的分析总结。...instance.course course.fav_num += 1 course.save() 显然,这不是唯一的解决方法,我们还可以在seriliazer进行设置,我们还可以使用drf...page = self.paginate_queryset(queryset) if page is not None: # 分页不为空,那么不能简单的执行...Response(serializer.data) # 还需要将相关的page信息序列化在进行响应 serializer = self.get_serializer...一般情况下,当我们在操作某一个model的时候,涉及到另外一个model中数据的修改,那么就需要对这个mixins下执行save的逻辑的方法进行重写。
DRF序列化器 DRF中有一个serializers模块专门负责数据序列化,DRF提供的方案更先进、更高级别的序列化方案。...: serializer.is_valid():调用序列化器验证是否通过,传入raise_exception=True可以在验证失败时由DRF响应400异常。...serializer.errors:获取反序列化器验证的错误信息 serializer.data:获取序列化器返回的数据 serializer.save():将验证通过的数据保存到数据库(ORM操作)...常用参数 通用参数 DRF序列化器:扩展验证规则 如果常用参数无法满足验证要求时,可通过钩子方法扩展验证规则。...局部钩子:validate_字段名(self, 字段值) 全局钩子:validate(self, 所有校验的数据字典)
如果序列化器对前端发送的数据验证失败,返回400错误。...) return Response(serializer.data, status=status.HTTP_201_CREATED, headers=headers) def...成功返回200,序列化器校验数据失败时,返回400错误。...DestroyModelMixin from rest_framework.generics import GenericAPIView from book.models import BookInfo from drf_book.serializer...请注意,mixin 类提供操作方法,而不是直接定义处理程序方法,例如 和 。这允许更灵活的行为组合。.get().post() mixin 类可以从 中导入。
快速构建 API:通过 DRF 的封装类(如 APIView、ModelSerializer)减少重复代码。功能丰富:内置认证、权限、分页、过滤等常用功能。...三、实现一个简单接口第 1 步:安装配置 DRF安装 DRF:pip install djangorestframework创建book应用python manage.py startapp book配置...表示处理多个对象) serializer = BookSerializer(books, many=True) # 返回 JSON 响应 return Response(serializer.data...include('your_app.urls')), # 包含应用路由]第 6 步:测试 GET 请求手动添加 Book 数据:启动Django Shellpython manage.py shell执行添加代码...手动序列化数据 views.py class BookListAPIView(APIView): ...
因为前面只给Snippet添加了owner字段,还没有写反序列化更新模型的代码,所以通过请求访问视图,再尝试反序列化的时候,报错了。...serializer): serializer.save(owner=self.request.user) 在SnippetList视图中重写perform_create()方法,意思是在保存时,...) return Response(serializer.data, status=status.HTTP_201_CREATED, headers=headers) def...这个报错是发生这条代码: serializer.save(owner=self.request.user) 也就是说请求访问视图后,进行反序列化了,但是反序列化失败了。非常奇怪!...给视图添加认证 我们需要让API更符合常规,让未认证的用户不能执行视图中的代码。DRF提供了rest_framework .permissions来给视图添加认证: ?
视图集是 DRF 提供的用于统一管理多个相关视图逻辑的类。...自动检测视图集支持的方法undefined当调用 router.register() 注册视图集时,路由器会检查视图集是否实现了特定方法:如果视图集包含 list 方法 → 生成列表路由(GET /users...例如,注册 users 时,会生成 r'^users/$' 和 r'^users/{pk}/$'。...自定义序列化器class UserViewSet(ModelViewSet): def get_serializer_class(self): if self.action == '...serializer.validated_data['password']) user.save() return Response({'status': '密码已修改'})说明:根据动作动态选择序列化器
领取专属 10元无门槛券
手把手带您无忧上云