Django REST Framework框架

Django REST Framework框架

【1】概述

Django REST Framework(简称DRF)是基于Django Web框架的一个开源的Web API框架。它提供了一组用于快速构建Web API的工具和库,包括序列化器、认证、权限、视图、路由和文档化等功能。

DRF的主要特点包括:

  • 提供了强大的序列化器,可以将模型对象序列化为JSON等格式,并支持反序列化

  • 提供了多种认证方式,包括基本认证、Token认证、OAuth认证等

  • 提供了多种权限校验方式,包括基于角色的权限校验、基于对象的权限校验等

  • 提供了多种视图类,包括基于函数的视图、基于类的视图、通用视图等

  • 提供了路由功能,可以轻松地将URL映射到对应的视图

  • 可扩展性,插件丰富

DRF官方:https://www.django-rest-framework.org/

GitHub:https://github.com/encode/django-rest-framework

【2】安装DRF框架

DRF框架依赖于Django,需先安装Django环境。

pip install djangorestframework

【3】注册DRF

在Django项目中使用DRF框架进行开发时,需要将rest_framework在INSTALLED_APPS中进行注册。

INSTALLED_APPS = ['django.contrib.admin','django.contrib.auth','django.contrib.contenttypes','django.contrib.sessions','django.contrib.messages','django.contrib.staticfiles','task_api','Api01','Api02','rest_framework',
]

【六】字段类型与选项参数

【1】字段类型

字段字段构造方式描述
BooleanFieldBooleanField()布尔类型,通常用于表示真假数据
NullBooleanFieldNullBooleanField()用于表示布尔类型的数据,可以包含三种值:True、False和Null。它可以自动将输入的字符串转换为布尔类型,并支持Null值
CharFieldCharField(max_length=None, min_length=None, allow_blank=False, trim_whitespace=True)字符串类型,通常用于表示文本数据
EmailFieldEmailField(max_length=None, min_length=None, allow_blank=False)电子邮件类型,通常用于表示电子邮件地址
RegexFieldRegexField(regex, max_length=None, min_length=None, allow_blank=False)用于表示正则表达式类型的数据。它可以自动验证输入的字符串是否符合指定的正则表达式格式
SlugFieldSlugField(max_length=50, minlength=None, allow_blank=False)是CharField的一个子类,通常用于表示URL中的短标识符。它可以自动将输入的字符串转换为URL安全的格式
URLFieldURLField(max_length=200, min_length=None, allow_blank=False)URL类型,通常用于表示URL地址
UUIDFieldUUIDField(format=‘hex_verbose’) hex_verbose、 hex、int、urn用于表示UUID(通用唯一识别码)类型的数据。它可以自动验证输入的字符串是否符合UUID格式,并将其转换为UUID对象
IPAddressFieldIPAddressField(protocol=‘both’, unpack_ipv4=False, **options)用于表示IP地址类型的数据。它可以自动验证输入的字符串是否符合IP地址格式,并将其转换为IP地址对象
IntegerFieldIntegerField(max_value=None, min_value=None)整数类型,通常用于表示数字数据
FloatFieldFloatField(max_value=None, min_value=None)浮点数类型,通常用于表示小数数据
DecimalFieldDecimalField(max_digits, decimal_places, coerce_to_string=None, max_value=None, min_value=None) max_digits: 最多位数 decimal_palces: 小数点位置高精度十进制数类型,通常用于表示货币等需要精确计算的数据
DateTimeFieldDateTimeField(format=api_settings.DATETIME_FORMAT, input_formats=None)日期时间类型,通常用于表示时间戳等时间数据
DateFieldDateField(format=api_settings.DATE_FORMAT, input_formats=None)日期类型,通常用于表示日期数据
TimeFieldTimeField(format=api_settings.TIME_FORMAT, input_formats=None)时间类型,通常用于表示时间数据
DurationFieldDurationField()用于表示时间间隔类型的数据,可以表示一段时间的长度。它可以自动将输入的字符串转换为时间间隔类型
ChoiceFieldChoiceField(choices)选择类型,可以定义一个选择列表,用于表示一组固定的选项
MultipleChoiceFieldMultipleChoiceField(choices)用于表示多选框类型的数据。它可以定义一个选项列表,用于表示可选的选项
FileFieldFileField(max_length=None, allow_empty_file=False, use_url=UPLOADED_FILES_USE_URL)文件类型,通常用于表示文件数据
ImageFieldImageField(max_length=None, allow_empty_file=False, use_url=UPLOADED_FILES_USE_URL)图像类型,通常用于表示图片数据
ListFieldListField(child=, min_length=None, max_length=None)列表类型,可以用于表示一个列表数据
DictFieldDictField(child=)字典类型,可以用于表示一个字典数据

【2】选项参数

max_length和min_length是针对字符串类型的参数;max_value和min_value是针对数字类型的参数。

参数名称作用
max_length最大长度
min_length最小长度
max_value最大值
min_value最小值

无论哪种字段类型都可以使用以下可选参数。

参数名称说明
read_only默认False 。用于指定字段是否只能用于序列化输出,不能用于反序列化输入。通常用于表示只读数据,例如时间戳等。在反序列化输入时,该字段的值会被忽略。
write_only默认False 。 用于指定字段是否只能用于反序列化,不能用于序列化输出。通常用于表示敏感数据,例如密码等。在序列化输出时,该字段的值会被忽略。
required表明该字段在反序列化时必须输入,默认True
default序列化和反序列化时使用的默认值
error_messages包含错误编号与错误信息的字典
label用于HTML展示API页面时,显示的字段名称
allow_blank设置字段是否允许为空白字符串。如果设置为True,反序列化时如果该字段的值为空白字符串会被认为是有效值
validators设置字段的验证器。验证器是一个可调用对象,用于验证输入的数据是否符合要求。

定义序列化器类的字段时,如果没有指定read_only和write_only,则这两个参数默认值都为False,表明对应的字段既在序列化时使用,也在反序列化时使用

【3】常见字段参数

  • 除了CharField以外,还要很多别的—>表模中 models.CharField ----> 基本–对应
  • 如果跟 表模型中对不上,统一用CharField
#1 字段类上,有参数,他们作用是做反序列化校验的  max_length...
#2 通用字段参数:
required	表明该字段在反序列化时必须输入,默认True
default	    反序列化时使用的默认值
allow_null	表明该字段是否允许传入None,默认False
validators	该字段使用的验证器--》字段自己的校验[1 max_lenght 2 validators ],局部钩子,全局钩子 name=serializer.CharField(validators=[valida_name])error_messages	包含错误编号与错误信息的字典label	用于HTML展示API页面时,显示的字段名称
help_text	用于HTML展示API页面时,显示的字段帮助提示信息'''             -------非常重要------
read_only	表明该字段仅用于序列化输出,默认False
write_only	表明该字段仅用于反序列化输入,默认False      '''# 3 CharField
max_length	最大长度
min_lenght	最小长度
allow_blank	是否允许为空
trim_whitespace	是否截断空白字符# 4 IntegerField
max_value	最小值
min_value	最大值

写一个data_name验证器

​ 验证器可以应用于任何您想要验证的字段上,包括 task_timetask_idtask_name。您可以在需要的任何字段上使用这个验证器,以确保输入的数据符合您的要求。

​ 通过将验证器应用于多个字段,您可以在不同的字段上共享相同的验证逻辑,从而实现代码的重用和简化。这种方式使得在整个序列化器中保持一致的验证逻辑变得更加容易。

from rest_framework import serializers
from rest_framework.exceptions import ValidationErrordef data_name(name):if name.startswith('shi'):raise ValidationError('不能用shi开头')else:return nameclass TaskSerializer(serializers.Serializer):# required=False表明该字段在反序列化时必须输入,默认True# allow_null	表明该字段是否允许传入None,默认False# default	    反序列化时使用的默认值task_name = serializers.CharField(required=False,allow_null=True,default='默认字段',validators=[data_name])task_id = serializers.CharField(max_length=64,validators=[data_name])task_time = serializers.DateTimeField()

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

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

相关文章

HFSS学习-day1-T形波导的内场分析和优化设计

入门实例--T形波导的内场分析和优化设计 HFSS--此实例详细步骤1.创建项目2.设置求解类型3.设置与建模相关的一些信息设置默认的建模长度单位 4.创建T形模型的三个臂基本参数端口激励进行复制 5.创建被挖去的部分设置正确的边界条件和端口激励方式添加求解设置添加扫频项检查一下…

x86汇编伪指令align和p2align

1.align 表达式 align bound 表达式说明 功能:地址对齐的伪指令,用来指定符号的对齐方式。. 作用范围:只限于紧跟它的那条指令或者数据,而接下来的指令或者数据的地址由上一条指令的地址和其长度决定。 2. p2align 表达式如下&…

大模型_基于医疗领域用lora微调ChatDoctor模型

文章目录 ChatDoctor目标方法结果结论收集和准备医患对话数据集创建外部知识数据库具有知识大脑的自主聊天医生的开发模型培训结果数据和模型: 微调推理 ChatDoctor 目标 这项研究的主要目的是通过创建一个在医学建议中具有更高准确性的专业语言模型,来…

Mysql 行格式 DYNAMIC 和 COMPACT 区别

MySQL的InnoDB存储引擎提供了多种行格式,其中DYNAMIC和COMPACT是两种常见的选择。这两种行格式在处理数据时有一些关键的区别,尤其是在管理大字段(如BLOB、TEXT和大的VARCHAR字段)方面。以下是DYNAMIC和COMPACT行格式的主要区别&a…

【毕业设计】基于SSM的运动用品商城的设计与实现

1.项目介绍 在这个日益数字化和信息化的时代,随着人们购物习惯的转变,传统的实体商店已经无法满足人们日益增长的在线购物需求。因此,基于SSM(Spring Spring MVC MyBatis)框架的运动用品商城项目应运而生&#xff0…

最原理的一集——Mathtype公式编号设置(Mathtype7.8+Word)

版本 Mathtype7.8Office2019 Word 读完本文你将会 随心所欲,想怎么给公式编号就怎么给公式编号,想从(X.1)开始,就从(X.1)开始大概了解Mathtype公式设置原理给作者点赞 如果你想自己跟着文章做的话 请不要在自己的论文里边直接操作&#…

已解决ArrayTypeMismatchException异常的正确解决方法,亲测有效!!!

已解决ArrayTypeMismatchException异常的正确解决方法,亲测有效!!! 目录 问题分析 报错原因 示例报错代码: 解决思路 解决方法 示例解决代码: 总结 问题分析 在Java编程中,ArrayTypeMi…

创造美的同时,也创造了等量的丑

人们都喜欢美的事物,讨厌丑的事物。如果说有人喜欢丑的事物,那是因为这些事物在他看来是美的。 因此,人们在不断地创造美。然而,在创造美的同时,其实也创造了等量的丑,不仅仅是因为创造美的过程会带来很多…

【6D位姿估计】数据集汇总 BOP

前言 BOP是6D位姿估计基准,汇总整理了多个数据集,还举行挑战赛,相关报告被CVPR2024接受和认可。 它提供3D物体模型和RGB-D图像,其中标注信息包括6D位姿、2D边界框和2D蒙版等。 包含数据集:LM 、LM-O 、T-LESS 、IT…

Python数据清洗与可视化实践:国际旅游收入数据分析

文章目录 概要整体流程名词解释NumPyPandasMatplotlibre 技术细节数据清洗可视化 小结 概要 在本篇博客中,我们将通过一个实际的案例,演示如何使用Python进行数据清洗和可视化,以分析国际旅游收入数据。我们将使用Python中的Pandas库来进行数…

磐石云最版本使用教程

磐石云外呼系统是一款集成了呼叫平台、电话线路和话术系统的软件,旨在提高企业的电话营销效率。以下是磐石云外呼系统的基本操作步骤: 安装和配置: 首先需要在Linux操作系统上安装磐石云外呼系统,通常需要至少4核CPU、8GB内存以及…

软件设计师-应用技术-数据库设计题2

基础知识及技巧: 1. 数据库设计过程: 四个阶段:需求分析、概念结构设计、逻辑结构设计、物理设计。每个阶段的产物: 需求分析:数据流图、数据字典、需求说明书。概念结构设计:ER模型逻辑机构设计&#xf…

设计模式之传输对象模式

在编程江湖里,有一种模式,它如同数据的“特快专递”,穿梭于系统间,保证信息的快速准确送达,它就是——传输对象模式(Data Transfer Object, DTO)。这不仅仅是数据的搬运工,更是提升系…

设置定位坐标+请按任意键继续

设置定位坐标 目的 在编程和游戏开发中,设置定位坐标的目的是为了确定对象在屏幕或游戏世界中的具体位置。坐标通常由一对数值表示,例如 (x, y),其中 x 表示水平位置,y 表示垂直位置。设置定位坐标的目的包括: 1. **精…

如何快速掌握DDT数据驱动测试?

前言 网盗概念相同的测试脚本使用不同的测试数据来执行,测试数据和测试行为完全分离, 这样的测试脚本设计模式称为数据驱动。(网盗结束)当我们测试某个网站的登录功能时,我们往往会使用不同的用户名和密码来验证登录模块对系统的影响&#x…

Vue3组合式API + TS项目中手写国际化插件

文章目录 1. 在项目中创建一个国际化插件的文件i18n.ts2. 创建语言模块json3. 注册插件4. 语言切换组件5. 使用插件(ts中使用全局需注意点) 1. 在项目中创建一个国际化插件的文件i18n.ts <!-- plugins/i18n.ts --> export const i18nPlugin {install(app: any, option:…

软考之零碎片段记录(二十九)+复习巩固(十七、十八)

学习 1. 后缀式&#xff08;逆波兰式&#xff09; 2. c/c语言编译 类型检查是语义分析 词法分析。分析单词。如单词的字符拼写等语法分析。分析句子。如标点符号、括号位置等语言上的错误语义分析。分析运算符、运算对象类型是否合法 3. java语言特质 即时编译堆空间分配j…

引领智算变革,九章云极DataCanvas公司激活油气行业新质生产力

近日&#xff0c;“2024中国石油石化企业信息技术交流大会暨油气产业数字化转型高峰论坛”在京成功举办&#xff0c;九章云极DataCanvas公司携“油气行业AI智算服务全栈解决方案”震撼亮相&#xff0c;为油气行业数智化转型和新质生产力发展提供领先的技术视角和前瞻实战经验分…

C++手写协程项目(协程实现线程结构体、线程调度器定义,线程挂起函数、线程切换函数、线程恢复函数、线程结束函数、线程结束判断函数,模块测试)

协程结构体定义 之前我们使用linux下协程函数实现了线程切换&#xff0c;使用的是ucontext_t结构体&#xff0c;和基于这个结构体的四个函数。现在我们要用这些工具来实现我们自己的一个线程结构体&#xff0c;并实现线程调度和线程切换、挂起。 首先我们来实现以下线程结构体…

python安装问题及解决办法(pip不是内部或外部命令也不是可运行)

pip是python的包管理工具&#xff0c;使python可在cmd&#xff08;命令行窗口&#xff0c;WinR后输入cmd&#xff09;中执行 针对 “pip不是内部或外部命令也不是可运行” 问题&#xff0c;需要在安装的时候将python添加到环境变量中 上图第三个选项必须勾选才能在cmd中使用pi…