它允许客户端通过HTTP请求与服务器进行交互,并支持不同的操作如GET、POST、PUT、DELETE等。...实现权限控制和认证在实际应用中,某些API需要保护,只有经过认证的用户才可以访问。Django REST framework支持多种认证机制,如Token认证、JWT认证等。...创建书籍:通过POST请求验证API是否能够创建新书籍,并确保数据正确存储。更新书籍:通过PUT请求验证API是否能够正确更新书籍信息。删除书籍:通过DELETE请求验证API是否能够删除指定书籍。...首先安装drf-yasg:$ pip install drf-yasg在项目的urls.py中添加Swagger文档的路由:# myproject/urls.pyfrom rest_framework...配置环境变量和安全设置为了在生产环境中安全地运行Django应用,我们需要配置环境变量并设置安全选项。在生产中,应将DEBUG设为False,并使用环境变量来管理敏感信息。
在我们最近的工作中,构建网站使用的架构是带有 Django REST Framework(DRF)后端的 React 前端。它们是通过在前端使用 axios(前端库)调用后端 API 来交互的。...只要我们提前定义好请求的资源列表(后面单个都简称:endpoint)和返回的数据格式,前端和后端就可以并行的进行开发。...---- 后端(The Backend) 除了简单安装 Django 和 DRF 以及设置数据库以外,后端没有太多的工作要做 $ pip3 install django djangorestframework...token 到 store 中。...React 组件中的其他地方进行其他 API 调用就很方便了。
DRF的信号是基于Python标准库中的signal模块实现的。DRF中的信号通常用于以下情况:在对象创建、保存、删除等事件发生时执行某些操作。...在请求处理过程中的某些特定时间点执行某些操作,如请求前、请求后、异常处理等。DRF提供了多个信号,可以通过导入django.dispatch.Signal来访问这些信号。...我们可以在do_something函数中执行任何自定义的代码,如发送电子邮件、调用外部API等。...这些信号可以帮助我们在请求处理过程中执行自定义的操作,如记录请求日志、检查授权等。...当请求开始处理时,log_request函数将被调用。我们可以在log_request函数中记录请求日志,如请求时间、请求方法、请求路径等。
rest 框架中请求需要在头部增加 Authorization token 来证明是合法的用户 至于这个token如何生成,下面介绍三种方法: 1. 在 django 界面中生成 token ?...image.png 点击进去后,点击右上角的 ? image.png 选择一个用户,则会自动生成一个token 2....命令上生成 token 进入工厂目录 python manage.py drf_create_token 3. 数据库直接生成 工厂目录下,打开 db.sqlite3 ?...如何在请求头中增加 token?
一、基础视图 (APIView)APIView 是 DRF 中所有视图的基类,继承自 Django 的 View,并添加了 DRF 特有的功能(如认证、权限、限流等)。...为了解决这个问题,DRF 提供了通用视图。二、通用视图 (Generic Views)DRF 的通用视图基于 "Mixin 组合" 思想,将常用功能封装成可复用的组件,通过继承组合实现复杂功能。...类继承关系GenericAPIView 是 DRF 通用视图体系的基石,其继承关系如下作为 APIView 的子类,GenericAPIView 保留了请求处理、认证、权限、限流等基础功能GenericAPIView...lookup_url_kwargURL 中用于对象查找的关键字参数,默认与 lookup_field 相同。需与 URL 配置中的参数名保持一致。...信息,可用于在序列化器中访问请求数据。
0909自我总结 drf框架中所有视图及用法 一.drf框架中的所有视图类 from django.views import View from rest_framework import views,...generics, mixins, viewsets 最基础:django自带的views类 drf框架中最基础的视图类:views.APIView drf框架中工具视图:generics GenericAPIView...进行相关方法的分装 二.viewsets视图集 ViewSetMixin:视图集工具 - 重写as_view - 将 请求方式 映射到视图类中的 指定方法 我们在路由中 类名.as_view({'get...UpdateModelMixin: partial_update 单局部改 DestroyModelMixin:destroy 单删 使用方法都是self.方法名(request,*args,**kwargs) 如单取...六自定制视图 本来get他就只会找类中get方法我们可以对其设置让他找我们对于的名称 路由层 from django.conf.urls import url from . import views
身份验证方案始终定义为类列表,DRF框架尝试对列表中的每个类进行身份验证,并使用成功进行身份验证的第一个类的返回值设置request.user和request.auth。...显然,获取到了商品数据,可以体会到token比session的应用更方便,但是使用token验证也存在一些问题: 请求服务器生成的token只存在于一台被请求的服务器中,如果是分布式系统,为了数据一致...2.DRF实现发送短信验证码接口 需要在DRF中接入短信验证码发送。...说明: 因为接口请求需要用POST方法,因此开始直接使用GET方法会失败,DRF提供了在页面直接用POST方法发送数据的功能,这对以后的测试提供了极大的方便。...从之前的DRF的测试中可以总结出,DRF请求消息返回的规范为: http_code { field1: ['', ''], field2: [], ...
Django视图是用来处理请求和响应的,Django默认是按Form和Template来设计的,如果要处理以JSON格式为主的RESTful API,那么就需要对Django请求和响应的处理代码进行优化改造...400,是不容易阅读的,于是DRF提供了标识符如HTTP_400_BAD_REQUEST来替代。...它们提供了一些新功能,比如: 检查请求是Request对象 添加上下文到Response对象 返回请求错误如405 Method Not Allowed 当request.data格式有误时,抛出ParseError...,如: return Response(serializer.data, status=status.HTTP_201_CREATED) request.data和Response()能根据请求的JSON...提供了可视化的API HTML文档,把API URL在浏览器中打开即可看到: ?
作者&好友:Laoqi 1、请求与响应 1.1 Request(请求) drf 传入视图的request 不再是Django默认的HttpRequest对象,而是drf 提供的拓展了HttpRequest...drf提供了Parser解析器,在接收到请求之后会根据Content-Type指明的请求数据类型(json、表单等)将请求数据进行解析,解析为类字典 对象保存到Request 对象之中...如果前端请求中未进行Accept声明,则会采用默认方式处理响应数据,我们可以通过配置来修改默认响应格式。 可以在rest_framework.settings 查找所有的drf默认配置项。...1.2.3 状态码 为了方便设置状态码,drf 在rest_framework.status 模块中提供了常用状态码常量。...的Response对象,视图会为响应数据设置(render)符合前端要求的格式; 任何APIException异常都会被捕获到,并且处理成合适的响应信息; 在进行dispatch()分发前,会对请求进行身份认证
drf-extensions配置缓存 2.配置Redis缓存 四、DRF通过throttling设置api的访问速率 青,取之于蓝而青于蓝;冰,水为之而寒于水。...显然,在手动添加新品之后,新品数据即同步,请求的参数中包含is_new=true。...三、DRF缓存设置 1.使用drf-extensions配置缓存 在一般情况下,将一些经常访问的数据放入缓存中,可以加快网页响应的速度。...对于变化小的数据,将其保存到缓存中请求时直接获取的成本要源于每次请求再重新计算获取的成本,所以使用缓存是很有必要的。...四、DRF通过throttling设置api的访问速率 因为爬虫的存在,如果爬虫的速率过快、不考虑网站的承受能力,会对服务器造成很大的压力,甚至影响正常用户的访问,因此需要限制访问速率,对关键数据、对性能要求高的数据进行限速
""" 接口:联系两个物质的媒介,完成信息交互 web程序中:联系前台页面与后台数据库的媒介 web接口组成: url:长得像返回数据的url链接 请求参数:前台按照指定的key提供数据给后台...(会存在跨域问题) https://example.org/api/ API很简单 版本: URL,如:https://api.example.com/v1/ 请求头,跨域时..._request就是原生request # 2) 原生request对象的属性和方法都可以被drf的request对象直接访问(兼容) # 3) drf请求的所有url拼接参数均被解析到query_params...中,所有数据包数据都被解析到data中 渲染模块 浏览器和Postman请求结果渲染数据的方式不一样 ---- 源码入口 APIView类的dispatch方法中:self.response = self.finalize_response...DEFAULT_RENDERER_CLASSES(全局配置) => # drf配置文件的DEFAULT_RENDERER_CLASSES """ ---- 自定义drf设置 全局配置 所有视图类统一处理
文章目录 一、DRF框架自带异常 二、自定义异常 一、DRF框架自带异常 REST 框架的视图处理各种异常,并处理返回适当的错误响应。 处理的异常包括: 在 REST 框架中定义的异常。...detail 例如,以下请求: DELETE http://api.example.com/foo/bar HTTP/1.1 Accept: application/json 可能会收到一个错误响应,指示该资源上不允许使用该方法...验证错误的处理方式略有不同,并且将在响应中包含字段名称作为键。如果验证错误不是特定于特定字段的,则它将使用“non_field_errors”键,或者为该设置设置设置的任何字符串值。...该函数必须采用一对参数,第一个是要处理的异常,第二个是包含任何额外上下文(如当前正在处理的视图)的字典。异常处理程序函数应返回对象,如果无法处理异常,则应返回。...还必须使用设置键在设置中配置异常处理程序。
常见的子类除了APIView类之外,DRF还提供了许多其他的类视图,以便我们更方便地编写代码和扩展API。...patch(): 处理PATCH请求,用于更新部分对象。delete(): 处理DELETE请求,用于删除对象。...): queryset = Article.objects.all() serializer_class = ArticleSerializer在这个例子中,我们定义了一个名为ArticleList...的视图,并继承了DRF的ListCreateAPIView类,它继承自GenericAPIView。...我们设置了queryset属性为所有Article对象,并设置了serializer_class属性为ArticleSerializer。
重点内容回顾-DRF 1. on_delete on_delete是定义模型类中外键的一个选项。 on_delete选项指明的是主表删除数据的时候,对于外键引用的表数据如何处理。...5.2Restful API接口设计风格 关键点: a.url地址尽量使用名词,不要使用动词; b.请求url地址采用不同的请求方式执行不同的操作;(POST新增/GET获取/PUT修改/DELETE删除...,我们还可以补充额外的验证: a.先写一个函数(如about_django)封装补充验证的功能,然后在字段中添加 validators参数,如下: btitle = serializers.CharField...权限:区分的是认证与未认证的用户。可以进行DRF框架默认全局权限设置,也可对其进行修改,还可以指定某个视图的权限控制设置,甚至可以自定义权限控制类。权限和认证通常是一起使用的。...团队开发注意事项 浅谈密码加密 Django框架中的英文单词 Django中数据库的相关操作 DRF框架中的英文单词
DRF视图和常用功能 DRF视图 DRF视图类介绍 在DRF框架中提供了众多的通用视图基类与扩展类,以简化视图的编写。...View:Django默认的视图基类,负责将视图连接到URL,HTTP请求方法的基本调度,之前写类视图一般都用这个。...APIView:DRF提供的所有视图的基类,继承View并扩展,具备了身份认证、权限检查、流量控制等功能。...next=/admin/ 刷新api视图: http://127.0.0.1:8000/myapp/api/ 局部(视图)session认证 注释全局settings.py中关于全局session认证的配置...\lib\site-packages\rest_framework_swagger\templates\rest_framework_swagger\index.html 将index.html中的第二行
""" ---- 格式 """ 1) jwt token采用三段式:头部.载荷.签名 2)每一部分都是一个json字典加密形参的字符串 3)头部和载荷采用的是base64可逆加密(前台后台都可以解密...、过期时间 签名:头部+载荷+秘钥 不可逆加密后的结果 注:服务器jwt签名加密秘钥一定不能泄露 签发token:固定的头部信息加密.当前的登陆用户与过期时间加密.头部+载荷+...过滤条件 响应数据:status,msg,results|data,url资源数据 """ DRF入门 """ 1、封装风格 2、请求生命周期:走APIView的as_view => View...的as_view调用APIView的dispatch => 分发给视图类的请求函数 => 响应 3、请求模块:二次封装request 4、解析模块:局部全局配置,form-data、urlencoding...scope对应的访问频率:次数/时间 iii)get_cache_key返回的是与限制条件有关的动态字符串 - 限制条件来源于请求参数或请求头 iv)全局局部配置 4、jwt认证
DRF 的路由器(如 DefaultRouter 和 SimpleRouter)通过以下机制自动生成 URL:视图集的标准化方法undefined视图集(如 ModelViewSet)定义了标准化的方法...:DRF 的路由器通过预定义的规则(如 list 对应 GET /users/),结合视图集的方法检测,动态生成 URL。...视图集中 @action 装饰器的使用@action 是 DRF 中用于在视图集(ViewSet)中定义自定义动作的核心装饰器,可以将任意方法暴露为 API 端点。下面通过更多场景详细说明其用法。...从请求体中获取 ids 列表,批量删除用户。2....pk 参数自动从 URL 中捕获(如 /users/5/activate/ 中的 5)。
需要解决的问题 DRF 暴露DELETE方法一旦被执行,就需要操作软删除,把is_deleted字段设置为True。...同样的,DRF对外操作的其他接口,如查询,修改操作,就不允许找到已经软删除的数据。 自带的Admin 既然是超级管理后台,那么就允许操作任何数据,包括已经软删除的,而不是列表找不到软删除的数据。...简而言之: drf找不到删除的数据,admin需要全部数据 drf和admin删除数据都是软删除 解决方案 DRF Django Manager 赋予了 Django的模型(Model)中操作数据库的能力...也就是如:Book.objects.all()中的objects。有没有想过它到底是什么? 显然,默认的模型Manager并不能解决我们的问题,所以我们需要自定义模型的Manager。...此时问题就变得简单,Manager进阶用法中,可以自定义其QuerySet^second class DeleteQuerySet(models.QuerySet): def delete(self
笔记中提到的代码repo:https://github.com/yexia553/drf 序列化与反序列化 简单地说,序列化就是从数据库中取出数据处理后传给API(请求方);反序列化就是从API(请求方...Serializer类 在DRF框架中,序列化与反序列化是通过Serializer来实现的,常用的有serializer.ModelSerializer和serializer.Serializer这两个类...1.ModelSerialzer 在前一篇DRF笔记(二):DRF框架初体验 中使用的其实就是ModelSerializer,在实际开发中使用的比较多的也是这个类。...一”中关联“多”,就要指定many=True这个参数 # 比如这里要查询出属于本书的所有英雄人物的信息,字段名必须是 关联模型名+'_set'这种格式,如“heroinfo_set” heroinfo_set...一”中关联“多”,就要指定many=True这个参数 # 比如这里要查询出属于本书的所有英雄人物的信息,字段名必须是 关联模型名+'_set'这种格式,如“heroinfo_set” heroinfo_set
光有认证没什么用,关于DRF中的权限控制以前写过一篇很详细的笔记可以参考:[DRF中基于组的权限控制](http://www.panzhixiang.cn/article/2021/8/23/38.html...这里设置为未认证用户每天100次请求次数,认证用户每分钟100次请求次数。 对视图进行限流 也可以通过ScopedRateThrottle对视图进行限流,以下是示例代码,代码仓库中并没有。...,就可以在请求的返回结果中对某一个字段进行排序。...,这样可以在请求中对这些字段进行排序 到这里就可以在API请求中对数据进行排序了,比如: /books/bookinfos?...title__startswith=天 过滤器的高级使用基本就是这样 分页 分页其实就是把数据库中的数据分批返回给请求者,而不是一次性把所有的数据都返回给请求者,这样容易出问题,比如数据库中商品表有一千万条数据