3.DRF框架 作用:大大提高RestAPI接口开发效率 简介: Django REST framework 框架是一个用于构建Web API 的强大而又灵活的工具。...通常简称为DRF框架 或 REST framework。 DRF框架是建立在Django框架基础之上,由Tom Christie大牛二次开发的开源项目。...(若没有Django环境,需要先创建环境安装Django) 3.1.1安装DRF pip install djangorestframework 3.1.2 添加rest_framework应用 我们利用在...Django框架学习中创建的demo工程,在settings.py的INSTALLED_APPS中添加’rest_framework’。...3.2见识DRF的魅力 我们仍以在学习Django框架时使用的图书英雄为案例,使用Django REST framework快速实现图书的REST API。 3.2.1.
', views.BookInfoViewSet) # 向路由器中注册视图集 urlpatterns += router.urls # 将路由器中的所以路由信息追到到django的路由列表中 定义序列化器...("图书不是关于Django的") return value 2) validate 在序列化器中需要同时对多个字段进行比较验证时,可以定义 validate 方法进行验证 class...=2147483647, min_value=0, required=True) 视图 Request 常用属性 1) .data –>类似 Django 中的 request.POST...APIView与View的不同之处在于: 传入到视图方法中的是REST framework的Request对象,而不是Django的HttpRequeset对象; 视图方法可以返回REST framework...在ViewSet中,没有提供任何动作action方法,需要我们自己实现action方法。
(如 ) 的方法。...我们可以通过声明与Django的形式非常相似的序列化程序来做到这一点。在名为的目录中创建一个文件,然后添加以下内容。...当我们开始编写使用序列化程序的视图时,这种相似性应该变得更加明显。 我们还可以序列化查询集而不是模型实例。...(label='ID', read_only=True) # title = CharField(allow_blank=True, max_length=100, required=False)...这不是你通常想要做的事情,REST框架视图实际上使用比这更明智的行为,但它现在会满足我们的目的。 我们还需要一个与单个代码段相对应的视图,该视图可用于检索、更新或删除代码段。
Django REST框架构建Web API。...多数时候,在 REST 框架中处理验证时,只需要依赖默认的字段验证,或者在序列化程序和字段类上编写显式验证方法。...在开发 REST API 接口时,在视图中需要做的最核心的事: 将数据库数据序列化作为前端所需要的格式,并返回。 将前端发送的数据反序列化作为模型类对象,并保存到数据库中。...REST 框架的验证 Django REST 框架序列化器中的验证处理方式:ModelForm ModelForm 验证部分在表单上执行,部分在模型实例上执行。...= IntegerField(label='ID', read_only=True) create_at = DateTimeField(read_only=True) reference
序列化使用 我们在django shell中来学习序列化器的使用。...': '降龙十八掌', 'hbook': '天龙八部'} 3 many参数 如果关联的对象数据不是只有一个,而是包含多个数据,如想序列化图书BookInfo数据,每个BookInfo对象关联的英雄HeroInfo...如果是非字段错误,可以通过修改REST framework配置中的NON_FIELD_ERRORS_KEY来控制错误字典中的键名。...("图书不是关于Django的") class BookInfoSerializer(serializers.Serializer): """图书数据序列化器""" id = serializers.IntegerField...Django的', code='invalid')]} 3)validate 在序列化器中需要同时对多个字段进行比较验证时,可以定义validate方法来验证,如 class BookInfoSerializer
痛点 代码冗余极其严重,不符合优秀测开风格 数据校验非常麻烦,且可复用性差 编码没有统一的规范,杂乱无章的感觉 写的代码非常多,不够简洁 仅支持json格式的传参,不支持form表单传参 仅能返回json...格式的数据,其他类型不支持 列表页视图没有分页,过滤,排序功能 Django REST framework 在Django框架基础上,进行二次开发 用于构建Restful API 简称为DRF框架或REST...中添加 'rest_framework' INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes...修改 projects.serializer.ProjectSerializer中的 id = serializers.IntegerField(label='ID', read_only=True)...增加 read_only=True,指定该字段只能进行序列化输出「只读」,不进行反序列化。
前言 serializers.Serializer可以对modle模型中的字段序列化,并且必须写create和update两个方法。...= IntegerField(label='ID', read_only=True) name = CharField(label='昵称', max_length=10) sex =...指定要包括的字段 如果我只想要其中的几个字段,如’id’, ‘name’, ‘mail’, ‘create_time’,那么fields参数可以设置成元组类型 # serializersapi.py from...= IntegerField(label='ID', read_only=True) name = CharField(label='昵称', max_length=10) mail...', read_only=True) >>> exclude排除字段列表 与fields属性设置相反的是,可以用exclude排除部分字段 # serializersapi.py from rest_framework
Field,它不根据用户提交获取值,而是从默认值或可调用的值中获取其值。...一种常见的使用场景就是在Model中存在user_id作为外键,在用户提交时,不允许提交user_id,但user_id在定义Model时又是必须字段,这种情况下就可以使用HiddenField提供一个默认值...等基础校验之外,还会会根据咱们写的这个序列化组件中设置的字段中有read_only=True属性的字段排除掉,这也是为什么我们在面写多对多和一对多字段时,如果字段名称和model表中多对多或者一对多的字段名称相同...,也就是说,如果我们将SerializerMethodField中的read_only改成False,那么在进行字段验证的时候,这个字段就没有被排除,也就是说,必须传给我这个authors_list名字的数据...,即便是这个字段的名字和数据表中字段名字相同,也是没有问题的,只有在用户提交数据保存的时候才会有问题,所以最好的解决方式就是加read_only属性,并且改一下字段名字,不要和数据表中这个字段的名字相同
DRF的核心当然不是知道视图类执行流程就可以了,DRF框架的核心那就是 序列化器的使用,如何使用序列化器实现 序列化、 反序列化,以及视图,这篇会介绍到~ 序列化器 什么是序列化和反序列化?...demo 在app中新建serializer.py,自定义类,继承DRF框架的Serializer及其子类 在类中写要序列化的字段(序列化哪些就写哪些,不序列化的不写) 使用序列化类,视图类中用,得到序列化类对象...,反序列化验证字段用 在对BookSerializer类实例化传入的参数不知道传什么,由于我们没有写构造函数,去父类看需要什么参数传什么就可以了 使用浏览器测得时候一定要注册rest_framework...或者value,比如price可以自定义成price_down,通过返回值来控制value 在序列化类中写需要搭配get_字段的方法,来自定制字段 方法二:在表模型(models.py)中写 '''models.py...字段是从表模型映射过来的,auto自增的,不传也可以 # 自定制的字段不传必须注册,在列表中 fields = ['id', 'title', 'price', 'price_info
如果是非字段错误,可以通过修改REST framework配置中的NON_FIELD_ERRORS_KEY来控制错误字典中的键名。...django.contrib.messages', 'django.contrib.staticfiles', 'rest_framework', # 把drf框架注册到django项目中...= serializers.字段类型(验证选项) # read_only=True,设置id为只读字段,当字段设置为read_only为True,则当前字段只会在序列化阶段使用 id...validate, 参数data代表了所有字段的数据值,其实就是视图代码中实例化序列化器对象时的data参数 开发中,类似 密码和确认密码,此时这2个字段,必须进行比较才能通过验证...trim_whitespace 是否截断空白字符 max_value 【数值】最小值 min_value 【数值】最大值 通用参数: 参数名称 说明 read_only 表明该字段仅用于序列化输出,默认
Django-Rest-Framework Django-Rest框架是构建Web API强大而灵活的工具包。 简单粗暴,直奔主题。...,例如 json ,我们可以通过声明序列化器来实现这一点,这些序列化器的工作方式与Django的表单相似,在test_restapi目录中创建一个serializer.py文件,添加以下代码。...class SnippetSerialiazer(zerializers.Serializer): id = serializers.IntegerField(read_only=True...,为此, 我们只需要在序列化器中添加 many=True的标记。...ModelSerializer类并没有做什么特别神奇的事情,它们只是创建序列化的快捷方式。
class SnippetSerializer(serializers.Serializer): id = serializers.IntegerField(read_only=True)...= IntegerField(label='ID', read_only=True) # title = CharField(allow_blank=True, max_length=100,...用我们的序列化来写常规的Django视图 让我们看看,使用我们新的序列化类,我们怎么写一些API视图。此刻,我们不会使用REST框架的其他特性,仅仅像写常规Django视图一样。...通常,你并不想这么做,并且事实上REST框架视图更实用的做法不是这样的,但是目前来说,这足以到达我们的目的。...相似地,虽然我们可以在响应对象中带数据,但允许REST框架渲染响应成正确的内容类型。
framework中使用haystack而进行的封装(如果在Django中使用haystack,则安装django-haystack即可)。...=True) document=True 表名该字段是主要进行关键字查询的字段 use_template=True 表示通过模板来指明索引值由哪些模型类字段组成 5)在templates...}} {{ object.id }} 路径固定: templates/search/indexes/建立索引的应用名/文件名.txt 通过sku的name、caption、id来进行关键字索引查询...base_name='skus_search') urlpatterns += router.urls bug说明: 如果在配置完haystack并启动程序后,出现如下异常,是因为drf-haystack还没有适配最新版本的...REST framework框架 importError: cannot import name '_get_count' 可以通过修改REST framework框架代码,补充_get_count函数定义即可
在前后端分离的应用模式中,后端仅返回前端所需的数据,不再渲染HTML页面,不再控制前端的效果. 在前后端分离的应用模式中,前端与后端的耦合度相对较低....: 将JSON数据转化为Python数据 总结 开发REST API ,视图操作 将数据库序列化为前端所需要的格式,并返回 将前端的数据反序列化为模型类对象,并保存到数据库中 REST framework...(label='ID', read_only=True) btitle = serializers.CharField(label='名称', max_length=20) bpub_date...(label='图书',read_only=True) # 2.字符串形式输出 # {'name': '乔峰', 'gender': True, 'comment': '降龙十八掌', 'book_id...': '降龙十八掌', 'book_id': 2, 'book': 'Book: 2-天龙八部'} # book = BookRelateField(read_only=True) 反序列化操作 验证
方法 两个类视图所对应的url地址不一致 再次优化 优化思路:使用动作来触发,而不是请求方法 from rest_framework import viewsets viewsets不再支持 get/post.../put/delete等请求方法,而只支持action动作 但是 ViewSet类中没有提供 get_object(), get_serializer等方法 继承 viewsets.GenericViewSet...第二个参数viewset为视图集「不要加as_view」 将自动生成的路由添加到列表中 from django.urls import path, includefrom projects import...参数用于指定该动作支持的请求方法,默认为get detail用于指定该动作要处理的是否为详情资源对象「url是否需要传递pk值」 在 url.py中添加 path('project/names/', views.ProjectsViewSet.as_view...=True, many=True) class Meta: model = Projects fields = ('id', 'interfaces_sets') 添加自定义
前言 REST framework中的serializers与Django的Form和ModelForm类非常像。...在apiapp目录下新建一个serializersapi.py文件,在该文件先编辑需要序列化的model,id是系统默认自带的一个字段。...UserPersonalInfoSerializer(serializers.Serializer): id = serializers.IntegerField(read_only=True...,error_messages read_only: 表示该字段只能用于API的输出,用户并不能直接指定该字段的值 write_only: 这个就和read_only相反,需要用户指定该字段的值 required...style: 说明字段的类型 error_messages: 字段出错时,信息提示 update方法中instancece参数是一个model实例,也可以是一个自定义类实例,其实model也就是一个类,
源码繁琐,多说无益,耐心细读官方文档: https://www.django-rest-framework.org/ 个人总结: REST是一种软件架构设计风格,不是标准,也不是具体的技术实现,只是提供了一组设计原则和约束条件...DRF(Django RestFramework)是一套基于Django开发的、帮助我们更好的设计符合REST规范的Web应用的一个Django App,所以,本质上,它是一个Django App。...=32, read_only=True, source='publish.name') publish_city = serializers.CharField(max_length=32, read_only...返回结果 5 认证组件 cookie和session两种方式可以保存用户信息,这两种方式不同的是cookie保存在客户端浏览器中,而session保存在服务器中,他们各有优缺点,配合起来使用,可将重要的敏感的信息存储在...,更新token值 创建俩个model,(token可以存储在user表中,建议存储在user表中): from django.db import models # Create your models
前言 serializers.Serializer可以对modle模型中的字段序列化,并且必须写create和update两个方法。...用户在添加商品的时候,需要把数据存到数据库,这个过程我们需要先校验是不是合法的。 ?...对用户传入的数据,我们需要先清洗下,因为用户可能会传一些数据库表里面没有的字段,这些我们不需要,于是可以用到 GoodsSerializer(data=request.data) data 用户传入的参数...校验忽略某些字段read_only=True 如果在创建商品的时候,有些字段我不想让用户去修改,比如 goods_status(商品状态),默认就是出售中, ?...这里涉及到传入参数的2个值互相校验 # 作者-上海悠悠 QQ交流群:717225969 # blog地址 https://www.cnblogs.com/yoyoketang/ class GoodsSerializer
在tutorial/settings.py中的INSTALLED_APPS添加snippets和rest_framework: INSTALLED_APPS = [ ......() print(repr(serializer)) # SnippetSerializer(): # id = IntegerField(label='ID', read_only=True)...编写views 我们之前用的是已经封装好的rest_framework.viewsets,这里直接用Django原生的view。...这里只是演示,实际会使用django-cors-headers来解决跨域问题,而不是给每个view都加上@csrf_exempt。...CSRF token是指服务器通过token来认证,如果请求中没有token或者token不匹配,那么就认为可能是CSRF而拒绝该请求。
这些过程 django 默认的视图函数在处理 HTTP 请求时是没有提供的,而经过 api_view 装饰后的视图,则提供了上述全部功能。...HTTP 响应即可),通常在 RESTful API 的视图函数中我们都会返回这个类,而不是 django 的 HTTP 响应类。...回顾我们在上一步教程的 交流的桥梁:评论功能 中对评论表单的定义,我们通过继承 ModelForm 定义了表单,而并没有显示地指定表单字段的类型。...label='ID', read_only=True) title = CharField(label='标题', max_length=70) created_time = DateTimeField...不过在后续的教程中,我们学习前端框架 Vue,那个时候,RESTful API 就有了它的用武之地了。
领取专属 10元无门槛券
手把手带您无忧上云