![](https://img-blog.csdnimg.cn/20201014180756913.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
RESTful风格
文章平均质量分 61
IT之一小佬
敲响键盘之乐,跳起程序之舞,抵达智慧之巅!
展开
-
RESTful之自动生成接口文档
REST framework可以自动帮助我们生成接口文档。接口文档以网页的方式呈现。自动接口文档能生成的是继承自APIView及其子类的视图。1. 安装依赖REST framewrok生成接口文档需要coreapi库的支持。pip install coreapi2. 设置接口文档访问路径在总路由中添加接口文档路径。文档路由对应的视图配置为rest_framework.documentation.include_docs_urls,参数title为接口文档网站的标题。原创 2021-07-20 15:40:15 · 681 阅读 · 0 评论 -
RESTful之异常处理 Exceptions
REST framework提供了异常处理,我们可以自定义异常处理函数。from rest_framework.views import exception_handlerdef custom_exception_handler(exc, context): # 先调用REST framework默认的异常处理方法获得标准错误响应对象 response = exception_handler(exc, context) # 在此处补充自定义的异常处理 if res原创 2021-07-19 16:35:30 · 577 阅读 · 0 评论 -
RESTful之分页Pagination
REST framework提供了分页的支持。 【主要在列表页中使用】我们可以在配置文件中设置全局的分页方式,如:REST_FRAMEWORK = { 'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.PageNumberPagination', 'PAGE_SIZE': 100 # 每页数目}【在开发中,分页一般都是使用局部定义的,很好全局声明的】也可通过自定义Pagination类,来为视图添加不同分.原创 2021-07-19 14:30:04 · 1659 阅读 · 0 评论 -
RESTful之排序
对于列表数据,REST framework提供了OrderingFilter过滤器来帮助我们快速指明数据按照指定字段进行排序。使用方法:在类视图中设置filter_backends,使用rest_framework.filters.OrderingFilter过滤器,REST framework会在请求的查询字符串参数中检查是否包含了ordering参数,如果包含了ordering参数,则按照ordering参数指明的排序字段对数据集进行排序。前端可以传递的ordering参数的可选字段值需要在原创 2021-07-19 13:18:40 · 565 阅读 · 0 评论 -
RESTful之过滤Filtering
对于列表数据可能需要根据字段进行过滤,我们可以通过添加django-fitlter扩展来增强支持。pip insall django-filter在配置文件中增加过滤后端的设置:INSTALLED_APPS = [ ... 'django_filters', # 需要注册应用,]REST_FRAMEWORK = { 'DEFAULT_FILTER_BACKENDS': ('django_filters.rest_framework.DjangoFilterB原创 2021-07-19 12:24:46 · 571 阅读 · 0 评论 -
RESTful之限流Throttling
可以对接口访问的频次进行限制,以减轻服务器压力。【如防止爬虫软件】使用可以在配置文件中,使用DEFAULT_THROTTLE_CLASSES和DEFAULT_THROTTLE_RATES进行全局配置,REST_FRAMEWORK = { 'DEFAULT_THROTTLE_CLASSES': ( 'rest_framework.throttling.AnonRateThrottle', 'rest_framework.throttling.UserR..原创 2021-07-19 09:46:35 · 309 阅读 · 0 评论 -
RESTful之权限Permissions
权限控制可以限制用户对于视图的访问和对于具体数据对象的访问。在执行视图的dispatch()方法前,会先进行视图访问权限的判断 在通过get_object()获取具体对象时,会进行对象访问权限的判断使用可以在配置文件中设置默认的权限管理类,如REST_FRAMEWORK = { 'DEFAULT_PERMISSION_CLASSES': ( 'rest_framework.permissions.IsAuthenticated', )}如果未指明,则原创 2021-07-18 23:02:41 · 320 阅读 · 0 评论 -
RESTful之认证Authentication
可以在配置文件中配置全局默认的认证方案 【认证和权限是分不开的,有了认证就得有权限】【下面是全局配置,在settings中设置】REST_FRAMEWORK = { 'DEFAULT_AUTHENTICATION_CLASSES': ( 'rest_framework.authentication.BasicAuthentication', # 基本认证 'rest_framework.authentication.SessionAuthentica..原创 2021-07-18 22:44:02 · 375 阅读 · 0 评论 -
RESTful之路由Routers
对于视图集ViewSet,我们除了可以自己手动指明请求方式与动作action之间的对应关系外,还可以使用Routers来帮助我们快速实现路由信息。REST framework提供了两个routerSimpleRouter DefaultRouter1. 使用方法1) 创建router对象,并注册视图集,例如from rest_framework import routersrouter = routers.SimpleRouter()router.register(r'books原创 2021-07-18 22:17:53 · 627 阅读 · 0 评论 -
RESTful之视图集ViewSet
使用视图集ViewSet,可以将一系列逻辑相关的动作放到一个类中:list() 提供一组数据 retrieve() 提供单个数据 create() 创建数据 update() 保存数据 destory() 删除数据【这5个是默认的方法名】ViewSet视图集类不再实现get()、post()等方法,而是实现动作action如 list() 、create() 等。视图集只在使用as_view()方法的时候,才会将action动作与具体请求方式对应上。如:【from rest_f..原创 2021-07-18 21:05:45 · 326 阅读 · 0 评论 -
RESTful之视图概览和视图说明
一、视图概览REST framework 提供了众多的通用视图基类与扩展类,以简化视图的编写。视图的继承关系:视图的方法与属性:二、视图说明1. 两个基类1)APIViewrest_framework.views.APIViewAPIView是REST framework提供的所有视图的基类,继承自Django的View父类。APIView与View的不同之处在于:传入到视图方法中的是REST framework的Request对象,而不是Django的Ht.原创 2021-07-18 14:16:40 · 332 阅读 · 0 评论 -
RESTful视图之Request 与 Response
1. RequestREST framework 传入视图的request对象不再是Django默认的HttpRequest对象,而是REST framework提供的扩展了HttpRequest类的Request类的对象。REST framework 提供了Parser解析器,在接收到请求后会自动根据Content-Type指明的请求数据类型(如JSON、表单等)将请求数据进行parse解析,解析为类字典对象保存到Request对象中。Request对象的数据是自动根据前端发送数据的格式进行解原创 2021-07-18 10:49:35 · 612 阅读 · 0 评论 -
模型类序列化器ModelSerializer
如果我们想要使用序列化器对应的是Django的模型类,DRF为我们提供了ModelSerializer模型类序列化器来帮助我们快速创建一个Serializer类。ModelSerializer与常规的Serializer相同,但提供了:基于模型类自动生成一系列字段 基于模型类自动为Serializer生成validators,比如unique_together 包含默认的create()和update()的实现1. 定义比如我们创建一个BookInfoSerializer:class原创 2021-07-18 09:51:36 · 935 阅读 · 0 评论 -
Serializer反序列化使用之验证和保存
1. 验证使用序列化器进行反序列化时,需要对数据进行验证后,才能获取验证成功的数据或保存成模型类对象。在获取反序列化的数据前,必须调用is_valid()方法进行验证,验证成功返回True,否则返回False。验证失败,可以通过序列化器对象的errors属性获取错误信息,返回字典,包含了字段和字段的错误。如果是非字段错误,可以通过修改REST framework配置中的NON_FIELD_ERRORS_KEY来控制错误字典中的键名。验证成功,可以通过序列化器对象的validated_data原创 2021-07-18 00:15:46 · 1749 阅读 · 0 评论 -
Serializer序列化使用
在django shell中来学习序列化器的使用。python manage.py shell1 基本使用1) 先查询出一个图书对象from booktest.models import BookInfobook = BookInfo.objects.get(id=2)2) 构造序列化器对象from booktest.serializers import BookInfoSerializerserializer = BookInfoSerializer(book)原创 2021-07-17 23:19:17 · 256 阅读 · 0 评论 -
定义Serializer序列化器
序列化器的作用:进行数据的校验 对数据对象进行转换定义Serializer1. 定义方法Django REST framework中的Serializer使用类来定义,须继承自rest_framework.serializers.Serializer。例如,我们已有了一个数据库模型类BookInfoclass BookInfo(models.Model): btitle = models.CharField(max_length=20, verbose_name='名称')原创 2021-07-17 20:58:47 · 213 阅读 · 0 评论 -
DRF工程搭建、环境安装与配置
DRF需要以下依赖:Python (2.7, 3.2, 3.3, 3.4, 3.5, 3.6) Django (1.10, 1.11, 2.0)DRF是以Django扩展应用的方式提供的,所以我们可以直接利用已有的Django环境而无需从新创建。(若没有Django环境,需要先创建环境安装Django,参考博文:https://blog.csdn.net/weixin_44799217/article/details/118484363)1. 安装DRFpip install django原创 2021-07-17 10:57:34 · 318 阅读 · 0 评论 -
Django REST framework 简介
1.在序列化与反序列化时,虽然操作的数据不尽相同,但是执行的过程却是相似的,也就是说这部分代码是可以复用简化编写的。2.在开发REST API的视图中,虽然每个视图具体操作的数据不同,但增、删、改、查的实现流程基本套路化,所以这部分代码也是可以复用简化编写的:增:校验请求数据 -> 执行反序列化过程 -> 保存数据库 -> 将保存的对象序列化并返回 删:判断要删除的数据是否存在 -> 执行数据库删除 改:判断要修改的数据是否存在 -> 校验请求的数据 -> 执原创 2021-07-17 09:51:38 · 334 阅读 · 0 评论 -
明确REST接口开发的核心任务
分析一下上节的案例,可以发现,在开发REST API接口时,视图中做的最主要有三件事:将请求的数据(如JSON格式)转换为模型类对象 操作数据库 将模型类对象转换为响应的数据(如JSON格式)序列化Serialization维基百科中对于序列化的定义:序列化(serialization)在计算机科学的资料处理中,是指将数据结构或物件状态转换成可取用格式(例如存成档案,存于缓冲,或经由网络中传送),以留待后续在相同或另一台计算机环境中,能恢复原先状态的过程。依照序列化格式重新获取字节的结果时原创 2021-07-16 22:10:40 · 251 阅读 · 0 评论 -
使用Django开发REST 接口
我们以在Django框架中使用的图书英雄案例来写一套支持图书数据增删改查的REST API接口,来理解REST API的开发。【此处的model.py中内容,详见Django框架栏目中设置的内容】在此案例中,前后端均发送JSON格式数据。# views.pyfrom datetime import datetimeclass BooksAPIVIew(View): """ 查询所有图书、增加图书 """ def get(self, request):原创 2021-07-16 21:52:33 · 595 阅读 · 0 评论 -
RESTful设计方法
1. 域名应该尽量将API部署在专用域名之下。https://api.example.com如果确定API很简单,不会有进一步扩展,可以考虑放在主域名下。https://example.org/api/2. 版本(Versioning)应该将API的版本号放入URL。http://www.example.com/app/1.0/foohttp://www.example.com/app/1.1/foohttp://www.example.com/app/2.0/原创 2021-07-16 16:53:40 · 299 阅读 · 0 评论 -
认识RESTful设计风格
在前后端分离的应用模式里,API接口如何定义?例如对于后端数据库中保存了商品的信息,前端可能需要对商品数据进行增删改查,那相应的每个操作后端都需要提供一个API接口:POST /add-goods 增加商品 POST /delete-goods 删除商品 POST /update-goods 修改商品 GET /get-goods 查询商品信息对于接口的请求方式与路径,每个后端开发人员可能都有自己的定义方式,风格迥异。是否存在一种统一的定义方式,被广大开发人员接受认可的方式呢?这就是原创 2021-07-16 16:24:26 · 162 阅读 · 0 评论 -
Web应用模式
在开发Web应用中,有两种应用模式:前后端不分离 前后端分离1 前后端不分离【前端代码和后端代码都在一块,需要一个服务器就可以啦】【通过模板渲染数据】在前后端不分离的应用模式中,前端页面看到的效果都是由后端控制,由后端渲染页面或重定向,也就是后端需要控制前端的展示,前端与后端的耦合度很高。这种应用模式比较适合纯网页应用,但是当后端对接App时,App可能并不需要后端返回一个HTML网页,而仅仅是数据本身,所以后端原本返回网页的接口不再适用于前端App应用,为了对接App后端还需再开发原创 2021-07-15 14:31:22 · 384 阅读 · 0 评论