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 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()

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

如何让你的排单更快?

一般我们都喜欢做打板借用快速通道!但是目前快速通道也是共享通道,独立单元格基本不开发。 想要排单更快,想要隔夜打板,我们到底应该怎么做呢? 想要排单更快,说白了就是要提高你的交易速度!一&a…

ai写作工具推荐:如何用AI人工智能进行写作

AI写作工具:提升创作效率的秘密武器 在科技日新月异的今天,人工智能(AI)已经渗透到我们生活的方方面面,包括写作。AI写作工具,就是利用人工智能技术,帮助我们进行文本生成、语言优化等工作的工…

使用C语言实现杨氏矩阵并找出数字

前言 过了五一假期,咋们经过了一个假期的休息,要继续学习了,不能偷懒哦!! 今天让我们来看看如何在一个杨氏矩阵中找出自己想找到的数字。 首先,我们要了解一下杨氏矩阵到底是什么,如果一个矩阵中…

语音识别简介

⚠申明: 未经许可,禁止以任何形式转载,若要引用,请标注链接地址。 全文共计3077字,阅读大概需要3分钟 🌈更多学习内容, 欢迎👏关注👀【文末】我的个人微信公众号&#xf…

Android关于SparseArray面试题

问题1: 什么是SparseArray&#xff0c;它与HashMap有什么不同&#xff1f; 回答&#xff1a; SparseArray是一个用于优化特定情况下内存使用的数据结构&#xff0c;主要用于替代HashMap<Integer, Object>。SparseArray使用两个数组分别存储键和值&#xff0c;而不是使用…

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

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

Docker私有仓库与Harbor部署使用

目录 一、本地私有仓库 1. 下载registry镜像 2. 在daemon.json文件中添加私有镜像仓库地址 ​编辑 3. 运行registry容器 4. Docker容器的重启策略如下 5. 为镜像打标签 6. 上传到私有仓库 7. 列出私有仓库的所有镜像 8. 列出私有仓库的centos镜像有哪些tag 9. 先删…

zTasker v1.88.1一键定时自动化任务

软件介绍 zTasker是一款完全免费支持定时、热键或条件触发的方式执行多种自动化任务的小工具&#xff0c;支持win7-11。其支持超过100种任务类型&#xff0c;50种定时/条件执行方法&#xff0c;而且任务列表可以随意编辑、排列、移动、更改类型&#xff0c;支持任务执行日志&a…

分布式锁之RedissonLock

什么是Redisson&#xff1f; 俗话说他就是看门狗&#xff0c;看门狗机制是一种用于保持Redis连接活跃性的方法&#xff0c;通常用于分布式锁的场景。看门狗的工作原理是&#xff1a;当客户端获取到锁之后&#xff0c;会对Redis中的一个特定的键设置一个有限的过期时间&#xff…

投资海外标的,首选跨境ETF!现在新开佣金低至万0.5!

全球资产配置的利器 随着经济的发展&#xff0c;全球资产配置成为中产阶级的关注方向。目前&#xff0c;全球资产配置的主要渠道包括直接开立境外账户、 QDII 基金、跨境 ETF 等。 现阶段通过跨境 ETF 投资境外股市是最便利、最具效率的方式之一。首先&#xff0c;与直接境外…

4. RedHat认证-进程管理

4. RedHat认证-进程管理 1.进程概念 进程就是正在运行中的程序或者命令 每一个进程都是运行的实体&#xff0c;都有自己的地址空间&#xff0c;并占有一定的资源空间 程序消耗的是磁盘资源、进程消耗的是内存和CPU资源 进程会占用四类资源&#xff08;CPU 、内存、磁盘、网…

会声会影电影片头怎么做 会声会影电影质感调色技巧 会声会影视频制作教程 会声会影下载免费中文版

片头通常通过一系列的图像、音乐和文字等元素来引入电影的主题和氛围。通过视觉和音频的呈现方式&#xff0c;给观众留下深刻的第一印象&#xff0c;为电影的故事铺设基础。这篇文章来学习一下会声会影电影片头怎么做&#xff0c;会声会影电影质感调色技巧。 一、会声会影电影…

力扣每日一题-拆炸弹-2024.5.5

力扣题目&#xff1a;拆炸弹 题目链接: 1652.拆炸弹 题目描述 代码思路 根据代码实现分为k等于0和k不等于0的情况。k等于0很容易处理&#xff0c;而k不等于0时&#xff0c;需要使用滑动窗口的方式来解决。先根据小于0或大于0确定一个窗口&#xff0c;然后移动&#xff0c;获…

【数据结构与算法】之五道链表进阶面试题详解!

目录 1、链表的回文结构 2、相交链表 3、随机链表的复制 4、环形链表 5、环形链表&#xff08;||&#xff09; 6、完结散花 个人主页&#xff1a;秋风起&#xff0c;再归来~ 数据结构与算法 个人格言&#xff1a;悟已往之不谏&#xff0c;知…

Llama3-Tutorial之Llama3本地Web Demo部署

Llama3-Tutorial之Llama3本地 Web Demo部署 Llama3-Tutorial之Llama3本地Web Demo部署章节。 参考&#xff1a; https://github.com/SmartFlowAI/Llama3-Tutorial 1. 环境配置 conda create -n llama3 python3.10conda activate llama3conda install pytorch2.1.2 torchvision0…

全球260多个国家的年通货膨胀率数据集(1960-2021年)

01、数据简介 全球年通货膨胀率是指全球范围内&#xff0c;在一年时间内&#xff0c;物价普遍上涨的比率。这种上涨可能是由于货币过度供应、需求过热、成本上升等原因导致的。通货膨胀率是衡量一个国家或地区经济状况和物价水平的重要指标&#xff0c;通常以消费者价格指数&a…

模板初阶篇

本篇目标 泛型编程函数模板类模板 一、泛型编程 下面是实现一个通用的交换函数 void Swap(int& left, int& right) {int temp left;left right;right temp; } void Swap(double& left, double& right) {double temp left;left right;right temp; } v…

使用cloudflare实现访问LLM-API

一直在找调用第三方 LLM-API 的方法&#xff0c;看到有人用 cloudflare 实现&#xff0c;就尝试了一下&#xff0c;果然成功了。 突然发现&#xff0c;cloudflare 的功能真是个好东西&#xff0c;功能远超于本文所述。 1 相关网站 中文官网 - https://www.cloudflare-cn.com/注…

vue3—项目创建

背景 初次学习vue3&#xff0c;需要从项目创建开始。 步骤 打开cmd命令行&#xff0c;进入项目存放目录下&#xff0c;执行创建命令&#xff1a; npm create vuelatest 这一指令将会安装并执行 create-vue&#xff0c;它是 Vue 官方的项目脚手架工具。你将会看到一些诸如 …

通过Samba实现Windows和Linux之间进行共享文件

关于Samba 在嵌入式系统开发应用平台中&#xff0c;我们会常使用比如tftp、nfs和samba等服务器&#xff0c;来进行文件的传输&#xff0c;其中tftp和nfs是在嵌入式Linux开发环境中经常使用的传输工具&#xff0c;而samba则是Linux和Windows之间的文件传输工具。samba是模仿Wind…
最新文章