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环境。
python
pip install djangorestframework
【3】注册DRF
在Django项目中使用DRF框架进行开发时,需要将rest_framework在INSTALLED_APPS中进行注册。
python
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】字段类型
字段 | 字段构造方式 | 描述 |
---|---|---|
BooleanField | BooleanField() | 布尔类型,通常用于表示真假数据 |
NullBooleanField | NullBooleanField() | 用于表示布尔类型的数据,可以包含三种值:True、False和Null。它可以自动将输入的字符串转换为布尔类型,并支持Null值 |
CharField | CharField(max_length=None, min_length=None, allow_blank=False, trim_whitespace=True) | 字符串类型,通常用于表示文本数据 |
EmailField | EmailField(max_length=None, min_length=None, allow_blank=False) | 电子邮件类型,通常用于表示电子邮件地址 |
RegexField | RegexField(regex, max_length=None, min_length=None, allow_blank=False) | 用于表示正则表达式类型的数据。它可以自动验证输入的字符串是否符合指定的正则表达式格式 |
SlugField | SlugField(max_length=50, minlength=None, allow_blank=False) | 是CharField的一个子类,通常用于表示URL中的短标识符。它可以自动将输入的字符串转换为URL安全的格式 |
URLField | URLField(max_length=200, min_length=None, allow_blank=False) | URL类型,通常用于表示URL地址 |
UUIDField | UUIDField(format='hex_verbose') hex_verbose、 hex、int、urn | 用于表示UUID(通用唯一识别码)类型的数据。它可以自动验证输入的字符串是否符合UUID格式,并将其转换为UUID对象 |
IPAddressField | IPAddressField(protocol='both', unpack_ipv4=False, **options) | 用于表示IP地址类型的数据。它可以自动验证输入的字符串是否符合IP地址格式,并将其转换为IP地址对象 |
IntegerField | IntegerField(max_value=None, min_value=None) | 整数类型,通常用于表示数字数据 |
FloatField | FloatField(max_value=None, min_value=None) | 浮点数类型,通常用于表示小数数据 |
DecimalField | DecimalField(max_digits, decimal_places, coerce_to_string=None, max_value=None, min_value=None) max_digits: 最多位数 decimal_palces: 小数点位置 | 高精度十进制数类型,通常用于表示货币等需要精确计算的数据 |
DateTimeField | DateTimeField(format=api_settings.DATETIME_FORMAT, input_formats=None) | 日期时间类型,通常用于表示时间戳等时间数据 |
DateField | DateField(format=api_settings.DATE_FORMAT, input_formats=None) | 日期类型,通常用于表示日期数据 |
TimeField | TimeField(format=api_settings.TIME_FORMAT, input_formats=None) | 时间类型,通常用于表示时间数据 |
DurationField | DurationField() | 用于表示时间间隔类型的数据,可以表示一段时间的长度。它可以自动将输入的字符串转换为时间间隔类型 |
ChoiceField | ChoiceField(choices) | 选择类型,可以定义一个选择列表,用于表示一组固定的选项 |
MultipleChoiceField | MultipleChoiceField(choices) | 用于表示多选框类型的数据。它可以定义一个选项列表,用于表示可选的选项 |
FileField | FileField(max_length=None, allow_empty_file=False, use_url=UPLOADED_FILES_USE_URL) | 文件类型,通常用于表示文件数据 |
ImageField | ImageField(max_length=None, allow_empty_file=False, use_url=UPLOADED_FILES_USE_URL) | 图像类型,通常用于表示图片数据 |
ListField | ListField(child=, min_length=None, max_length=None) | 列表类型,可以用于表示一个列表数据 |
DictField | DictField(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
python
#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_time
、task_id
和 task_name
。您可以在需要的任何字段上使用这个验证器,以确保输入的数据符合您的要求。
通过将验证器应用于多个字段,您可以在不同的字段上共享相同的验证逻辑,从而实现代码的重用和简化。这种方式使得在整个序列化器中保持一致的验证逻辑变得更加容易。
python
from rest_framework import serializers
from rest_framework.exceptions import ValidationError
def data_name(name):
if name.startswith('shi'):
raise ValidationError('不能用shi开头')
else:
return name
class 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()