django rest_framework面经

news/2024/10/8 11:01:50/文章来源:https://www.cnblogs.com/lanjianhua/p/18451243

1、什么是drf组件

drf的全称是Django RESTful Framework;
它是一个基于django开发的组件,本质是一个django的app;
drf可以帮我们快速开发出一个遵循restful规范的程序。

2、drf组件提供的功能

1.免除csrf认证
2.视图(三种:(1)APIView,(2)ListAPIview,(3)GenericViewSet)
3.版本处理
4.认证
5.权限
6.节流(频率限制)
7.解析器
8.筛选器
9.分页
10.序列化和数据校验:可以对QuerySet进行序列化,也可以对用户提交的数据进行校验——展示特殊的数据depthsource:无需加括号,在源码内部会去判断是否可执行,如果可执行自动加括号。【多对一、一对一/choice】SerializerMethodField定义钩子方法【多对多】
11.渲染器:可以帮我们把json数据渲染到drf自己的页面上。

3、drf的主要视图有哪些?

主要视图有3种:APIView,ListAPIview,GenericViewSet。第一种:APIView第一种遵循了CBV的模式,里面的功能比较多但是需要自己写的代码也有很多提供了免除csrf认证,版本处理、认证、权限、节流、解析器、筛选器、分页、序列化、渲染器​​第二种:ListAPIView,RetrieveAPIView,CreateAPIView,UpdateAPIView,DestroyAPIView第二种则在第一种的基础上,封装了许多我们需要自己的写的代码,许多功能的实现只需要给专属的变量名赋值就可以实现该功能​​第三种:GenericViewSet,ListModelMixin,RetrieveModelMixin,CreateModelMixin,UpdateModelMixin,DestroyModelMixin第三种则重构了APIView中的as_view()方法,结合请求方法和不同Mixin类的方法名从而进行执行不同的功能。与前面两种最主要的区别是url路由中as_view()方法中需要传值。目前使用的主要目的是把第二种的bug(查询全部数据的功能和查询单个数据的功能无法在一个类中实现)实现在一个类中!

4、版本处理

DRF提供了几种版本控制类,如URLPathVersioning、NamespaceVersioning和AcceptHeaderVersioning等。开发人员可以根据自己的需求选择合适的版本控制类。

在Django REST Framework中使用版本控制,需要在settings.py文件中配置版本控制类。可以使用DEFAULT_VERSIONING_CLASS设置来指定版本控制类的名称.

# settings.py
REST_FRAMEWORK = {'DEFAULT_VERSIONING_CLASS': 'rest_framework.versioning.NamespaceVersioning',  # 版本验证'DEFAULT_VERSION': 'v2',  # 默认版本'ALLOWED_VERSIONS': ['v1', 'v2'],  # 有效版本
}# 接着在注册的 API 接口前带上版本号:
# urls.py
from django.urls import path
from rest_framework.urlpatterns import format_suffix_patterns
from .views import UserViewSeturlpatterns = [path('api/v1/users/', UserViewSet.as_view({'get': 'list'}), name='user-list'),
]urlpatterns = format_suffix_patterns(urlpatterns)

5、drf认证

REST framework 提供了4种认证方式:BasicAuthentication、SessionAuthentication、TokenAuthentication、RemoteUserAuthentication等。
(DRF的认证是在定义有权限类(permission_classes)的视图下才有作用)

(1)BasicAuthentication 该认证方案使用 HTTP Basic Authentication,并根据用户的用户名和密码进行签名。

(2)SessionAuthentication 此认证方案使用 Django 的默认 session 后端进行认证。

(3)TokenAuthentication 此认证方案使用简单的基于令牌的 HTTP 认证方案。

(4)RemoteUserAuthentication 这种身份验证方案允许您将身份验证委托给您的 Web 服务器,该服务器设置 REMOTE_USER 环境变量。

# setting.pyINSTALLED_APPS = (...'rest_framework.authtoken'  # 迁移数据库时(python manage.py migrate)会生成一个token表用于存储token信息
)# TokenAuthentication身份验证
REST_FRAMEWORK = {'DEFAULT_AUTHENTICATION_CLASSES': ('rest_framework.authentication.TokenAuthentication',  # drf的身份认证类),'DEFAULT_PERMISSION_CLASSES': ('rest_framework.permissions.IsAuthenticated',  # def的权限验证)
}

6、drf权限

drf 提供了5种权限:AllowAny、IsAuthenticated、IsAdminUser、IsAuthenticatedOrReadOnly、DjangoModelPermissions

(1)AllowAny权限类将允许不受限制的访问,而不管该请求是否已通过身份验证或未经身份验证。

(2)IsAuthenticated 权限类将拒绝任何未经身份验证的用户的权限,并允许其他权限。 如果你希望你的API仅供注册用户访问,则此权限适用。

(3)IsAdminUser 除非user.is_staff为True,否则IsAdminUser权限类将拒绝任何用户的权限,在这种情况下将允许权限。

(4)IsAuthenticatedOrReadOnly 将允许经过身份验证的用户执行任何请求。只有当请求方法是“安全”方法(GET, HEAD 或 OPTIONS)之一时,才允许未经授权的用户请求。

(5)DjangoModelPermissions 此权限类与Django的标准django.contrib.authmodel权限相关联。此权限只能应用于具有.queryset属性集的视图。只有在用户通过身份验证并分配了相关模型权限的情况下,才会被授予权限。

# setting.py 添加配置
REST_FRAMEWORK = {'DEFAULT_AUTHENTICATION_CLASSES': ('rest_framework.authentication.TokenAuthentication',  # drf的身份认证类),'DEFAULT_PERMISSION_CLASSES': ('rest_framework.permissions.IsAuthenticated',  # def的权限验证)
}

7、drf节流处理

匿名用户通过ip地址来控制访问频率,已登录用户通过id来控制首先要设置配置文件:# 也可以设置全局,"DEFAULT_THROTTLE_CLASSES":["rest_framework.throttling.AnonRateThrottle",]# 设置访问频率——一分钟10次"DEFAULT_THROTTLE_RATES": {"anon":"10/m"}- 实现原理把所有登录记录时间放在一个列表中,当用户请求网页的时候,用现在的时间减去约束的时间间隔,然后把小于这个时间记录排除,再计算出时间间隙的记录条数,如果其中的条数小于规定的条数则可以访问并且把当前时间添加进列表中,如果大于或等于则不让其访问。- 具体流程当用户请求网页的时候,后台允许该界面的url中的as_views(),运行源码的APIView中的dispatch方法,运行initial方法,里面的check_throttles方法,循环运行节流类中的allow_request方法,但是AnonRateThrottle等类中没有,去执行SimpleRateThrottle类中的allow_request方法,里面就是实现原理中的代码,如果可以访问返回True,如果不让访问则返回False,之后返回check_throttles,如果是False则运行SimpleRateThrottle类中的wait方法得到需要等待的时间在页面上显示!

8、序列化器

REST framework提供了两种序列化器:Serializer类和ModelSerializer类。

(1)Serializer 是对对象的序列化和反序列化

class Book(models.Model):id = models.IntegerField(primary_key=True)title = models.CharField(max_length=255)desc = models.CharField(max_length=255)is_deleted = models.IntegerField(choices=[(1, "删除"), (0, "未删除")])author = models.CharField(max_length=255)

(2)ModelSerializer 是将model中定义的字段直接序列化处理

class AccountSerializer(serializers.ModelSerializer):class Meta:model = Accountfields = ['id', 'account_name', 'users', 'created']

ModelSerializer 会自动生成model字段对应的Field不用我们定义。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/809852.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

AI视频边缘分析盒

Ai视频边缘分析盒通过在场所内安装高清摄像头,AI视频边缘分析盒将采集到的视频信号通过AI视觉智能算法进行智能分析。AI视频边缘分析盒利用人工智能技术,可以对场所内的行人、车辆、物品等进行识别和分析,发现异常情况并及时报警。AI视频边缘分析盒利用人工智能技术,能够对…

PhpStrom2024.1永久激活及激活过程中出现的问题

PhpStrom2024.1及激活工具下载激活工具:https://www.alipan.com/s/Aj5EEMxgLZC PhpStrom:https://www.alipan.com/s/cx69krtGXaw1、下载并根据提示安装PhpStrom 2、下载激活工具并将文件夹放在常用位置(文件夹名称与文件夹路径不可有中文)3、打开scripts文件夹4、先执行uni…

善用Excel,制作加班费统计表

Hello,大家好。今天给大家分享由我制作的加班费统计表,该表由EXCEL完成,下面就和我一起来体验吧。填写节假日和加班时薪信息 首先我们需要查询万年历,在下图的标记区域1中,将节假日及调休信息填写好。接着修改标记区域2,将 基准 填写为你所在城市的最低工资标准。 平时 指…

智慧加油站卸油作业行为分析系统

智慧加油站卸油作业行为分析系统通过在加油站的关键位置上安装监控设备,智慧加油站卸油作业行为分析系统实现对卸油作业过程的实时监测。当加油站现场出现卸油作业时人员离岗,打电话人员抽烟等违规行为,灭火器未正确摆放,明火和烟雾等异常状态,静电释放时间不足等情况时,…

迎接国庆旅游热潮,火山引擎数据飞轮助力景区数智化升级

随着人们生活水平的提高和旅游消费观念的转变,国庆假期成为人们出行旅游的黄金时段。同程旅行发布的报告显示,北京、杭州、重庆、上海、南京、成都等城市仍是 “十一” 假期国内热门的目的地,而一些新兴的宝藏旅游目的地如新疆阿勒泰、云南迪庆、山东威海等也被挖掘出来,成…

学生考试作弊检测系统

学生考试作弊检测系统采用人工智能技术,学生考试作弊检测系统过在考场中安装监控设备,对学生的作弊行为进行实时监测。当学生出现作弊行为时,学生考试作弊检测系统将自动识别并记录信息。同时,学生考试作弊检测系统还可以对异常情况进行识别和分析,及时通知考试监考人员进…

非煤矿山电子封条视频监控系统

非煤矿山电子封条视频监控系统采用现场摄像头和图像分析终端等设备,非煤矿山电子封条视频监控系统通过对煤矿关键地点进行实时监测和数据分析。当有异常情况发生时,非煤矿山电子封条视频监控系统可以通过人工智能算法将自动识别异常情况并记录信息,及时通知现场管理人员进行…

NewStarCtf 2024第一周writeup(部分)

是公开赛道的菜狗,web有两道题没做出来,pwn和reverse不会,主打一个写都写了记录下吧。 Signin 操作内容:做选择题得出flag。 flag值: flag{I_Agr3e_to_FoL10w_th3_ru1es_c41fa97d} MISC 兑换码 操作内容: 题目提示flag在图片下方,010修改图片宽度,得到flag。flag值: f…

《Programming from the Ground Up》阅读笔记:p147-p180

《Programming from the Ground Up》学习第9天,p147-p180总结,总计34页。 一、技术总结 1.Physical memeory p152, Physical memory refers to the actual RAM chips inside your computer and what they contain. 物理地址指的RAM,即我们买电脑所说的“内存”。 2.Virtual …

labview和QT编程

LabView LabView所面向的并非传统意义上的程序员。他的所有功能都可以通过组合某些组件来完成。程序的流程控制,比如循环之类的也是通过画图一样的操作来做的。 所有的程序功能几乎都可以通过鼠标来构造出来。优点是做一个能运行的程序非常简单。做一个虚拟的仪器很容易。也不…

kitti 数据集 可视化

1. 网址 KITTI官网网址:https://www.cvlibs.net/datasets/kitti/index.php 下载数据集:https://www.cvlibs.net/datasets/kitti/eval_object.php?obj_benchmark=3d KITTI数据集论文:Are we ready for Autonomous Driving? The KITTI Vision Benchmark Suite github可视化代…

table 单元格合并

table 元素合并单元格,用法倒是很简单,但过程中遇到了点小问题,记录下: 1、多行多列合并,使用 rowSpan、colSpan 设置要合并的行列数,再将合并后的多余单元格删除即可:function merge(table, px, py, row, col, remove = true) {py--;let target = table.rows[px].cell…