Django REST Framework框架

devtools/2024/12/23 0:12:00/

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.ppmy.cn/devtools/35517.html

相关文章

git--.gitignore--使用/详解/实例

简介 本文介绍git的.gitignore忽略文件的用法。 项目中并不是所有文件都需要保存到版本库中的,例如“target”目录及目录下的文件就可以忽略。 忽略某个文件(不提交到版本库的方法):在Git工作区的根目录下创建一个.gitignore文件…

redis数据结构

redis优势 Redis是缓冲中间件,是C语言编写的基于内存的高速缓存数据库,key-value存储系统结构,包含丰富的数据类型,string,list,set,zset,hash Redis中提供很多功能 缓存,事件发布或订阅,高速队列等场景丰富数据结构用于直接存取基于内存速度快可持久…

链式队列基本操作

链式队列的基本概念 链式队列是一种常见的数据结构,它使用链表作为其底层数据存储结构。链式队列的特点是动态的内存分配,可以有效地处理队列的入队和出队操作。下面,我将介绍链式队列的实现方法,并提供相应的C语言代码示例。 链…

代码本地化

目的 代码本地化(Localization)是指将软件应用程序中的文本、图形、声音和其他内容翻译成特定语言的过程,同时确保这些内容在目标文化中适当地呈现。本地化不仅仅是对文本进行翻译,还包括对日期、时间、数字、货币、排序顺序、文本…

yolov8训练自己的数据集

截至我的知识更新日期(2023年),YOLOv8 并不是一个已经公开发布的模型。YOLO(You Only Look Once)系列中最新的稳定版本是 YOLOv7,由 Ultralytics 团队开发。如果在此之后 Ultralytics 或其他团队发布了 YOL…

[redis] redis为什么快

1. Redis与Memcached的区别 两者都是非关系型内存键值数据库,现在公司一般都是用 Redis 来实现缓存,而且 Redis 自身也越来越强大了!Redis 与 Memcached 主要有以下不同: (1) memcached所有的值均是简单的字符串,red…

Java解决最后一个单词长度

Java解决最后一个单词长度 01 题目 给你一个字符串 s,由若干单词组成,单词前后用一些空格字符隔开。返回字符串中 最后一个 单词的长度。 单词 是指仅由字母组成、不包含任何空格字符的最大子字符串。 示例 1: 输入:s "Hel…

Agent AI智能体:未来社会中的引领者还是挑战者?

随着Agent AI智能体的智能化水平不断提高,它们在未来社会中将扮演重要角色,并对我们的生活产生深远影响。以下是我对Agent AI智能体的角色、发展路径以及可能带来的挑战的一些看法: 角色与应用领域: 个人助理和虚拟伴侣&#xff…