Django5+React18前后端分离开发实战05 序列化

Django REST Framework

We will use the Django REST Framework to help build our API.
我们会使用 Django REST Framework 框架来构建我们的API。

You can build APIs on your own in Django but it will take a lot of work.
你可以使用Django自己构建API,但是这会话费大量的工作。

The Django Rest Framework helps us quickly build reliable and secure APIs.
Django Rest Framework框架帮助我们构建可扩展的,安全的API接口。

There are a ton of documentation in the DRF site but thhis book will show you the best parts of the framework.
Django Rest Framework框架有非常完整的官方文档,但是我们在教程中只介绍其核心的部分。

Installation

Install DRF using pip:
使用pip安装DRF框架:

pip install djangorestframework

在这里插入图片描述

Next, add “rest_framework” to your INSTALLED_APPS setting in backend/settings.py.
接下来,在settings.py中配置应用:

INSTALLED_APPS = [
    "django.contrib.admin",
    "django.contrib.auth",
    "django.contrib.contenttypes",
    "django.contrib.sessions",
    "django.contrib.messages",
    "django.contrib.staticfiles",
    "todo",
    "rest_framework",
]

Adding the API app

We create a dedicated api app to contain API specific files.
我们创建一个api应用,包含API相关的文件。

注意:这里我们不需要创建这个应用,所有代码都写在之前创建的todo应用中。

So in the Terminal, under backend, run the command.
所以,在backend目录下执行命令:

python manage.py startapp api

We’ll need to add our new api app to INSTALLED_APPS.

In backend/backend/settings.py, add:

INSTALLED_APPS = [
    "django.contrib.admin",
    "django.contrib.auth",
    "django.contrib.contenttypes",
    "django.contrib.sessions",
    "django.contrib.messages",
    "django.contrib.staticfiles",
    "todo",
    "rest_framework",
    "api",
]

To get started on our API, we declare Serializers which translate data from the Todo Model instances into JSON objects that is easy to consume over the Internet.
为了启动我们的API,我们需要定义一个序列化类。这个序列化类的主要作用是将模型对象转换为JSON对象。

The JSON objects are outputted at API endpoint urls.
API接口返回的时JSON类型的对象。

Django REST framework shops with a powerful built-in serializer class that we can quickly extend with some code.
DRF框架提供了内置的序列化类,方便我们快速的生成JSON序列化对象。

In the api folder, create the file serilizers.py with the following code.
在api目录中,我们创建serializers.py文件,编写如下代码。

注意:这里我们的代码实际上是写在 todo/serializers.py

from rest_framework import serializers
from .models import Todo


class TodoSerializer(serializers.ModelSerializer):
    create_time = serializers.ReadOnlyField()
    update_time = serializers.ReadOnlyField()
    completed = serializers.ReadOnlyField()

    class Meta:
        model = Todo
        fields = ['id', 'title', 'detail', 'completed', 'create_time', 'update_time']

在这里插入图片描述

Code Explanation

class TodoSerializer(serializers.ModelSerializer):

We extend DRF’s ModelSerializer into a TodoSerializer class.
我们编写TodoSerializer类继承了DRF的ModelSerializer类。

ModelSerializer provides an API to create serializers from your model.
ModelSerializer类提供了根据模型创建序列化对象的接口。

class Metal:
    model = Todo
    fields = ['id', 'title', 'detail', 'completed', 'create_time', 'update_time']

Under class Meta, we specify our database model Todo and the fields we want to expose i.e. [‘id’, ‘title’, ‘detail’, ‘completed’, ‘create_time’, ‘update_time’].
通过Meta元类,我们指定了序列化类要暴露的字段类表:[‘id’, ‘title’, ‘detail’, ‘completed’, ‘create_time’, ‘update_time’]。

Django REST Framework then magically transforms our model data into JSON, exposing these fields from our Todo model.
DRF框架通过这些字段,会自动将Todo模型类对象自动转换为JSON对象。

Fields not specified here will not be exposed in the API.
没有在这里指定的字段不会通过API暴露出去。

Remember that “id” is created automatically by Django so we didn’t have to define it in Todo model.
记住id这个字段是Django自动创建的,所以我们不需要在Todo模型类中显式的声明。

But we will use it in our API.
但是我们会在API接口中使用它。

Often, an underlying database model will have more fields than what needs to be exposed.
通常,一个生产级别的数据库模型会比我们这里展示的要多得多。

DRF’s serializer class’s ability to include/exclude fields in our API is a great feature and makes it straightforward to control this.
DRF提供了include和exclude这两个字段,用来包含和排除指定的字段,使得当字段很多的时候,我们声明起来更加的简单。

Additionally,we specify that created and completed fields are read only.
另外,我们指定了几个只读的字段。

I.e., they cannot be edited by a user, because they ought to be auto-populated when a todo is created and when it is marked as complete.
这些字段在通过API交互的时候,只能通过GET获取,而不能通过POST和PUT等方法进行修改。

Now that we have our first serializer, let’s see how to setup URLs for our API endpoints in the next chapter.
现在,我们有了第一个序列化类,接下来我们看看如何通过URL和API和前端进行交互吧。

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

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

相关文章

【C++进阶】AVL树

0.前言 前面我们已经学习过二叉搜索树了,但如果我们是用二叉搜索树来封装map和set等关联式容器是有缺陷的,很可能会退化为单分支的情况,那样效率就极低了,那么有没有方法来弥补二叉搜索树的缺陷呢? 那么AVL树就出现了&…

nuxt: generate打包后访问资源404问题

现象 使用Nuxt.js开发的个人页面,部署到nginx服务器中,/_nuxt/*.js、/_nuxt/*.css等静态问题不能访问,提示404错误。 而我们的这些资源文件是存在的。 解决方法 加上此处代码进行上下文配置 baseURL: /nuxt/ 此时在nginx配置 /nuxt 代理 lo…

QAnything 1.4.1 中的文档解析

2024年初我们开源了QAnything,一个基于检索增强生成式应用(RAG)的本地知识库问答系统。对于本地知识库,QAnything支持多种格式的文档输入,允许用户上传包括PDF、图片、Word、PowerPoint、Excel、TXT,甚至音…

m1系列芯片aarch64架构使用docker-compose安装rocketmq5.0以及运维控制台

之前看到 DockerHub 上有大佬制作了 m1 芯片, aarch64架构的 rocketmq 镜像, 所以就尝试的安装了下, 亲测可用: 一. docker-compose.yml 文件命令 volumes 挂载目录需要换成自己的目录 注意 depends_on 标签, broker 和 console 的 启动要晚于 namesrv, 因为 broker 需要注册…

SpringBoot 集成 ChatGPT(附实战源码)

建项目 项目结构 application.properties openai.chatgtp.modelgpt-3.5-turbo openai.chatgtp.api.keyREPLACE_WITH_YOUR_API_KEY openai.chatgtp.api.urlhttps://api.openai.com/v1/chat/completionsopenai.chatgtp.max-completions1 openai.chatgtp.temperature0 openai.cha…

VSCode配置Lua5.4安装

参考:VSCode 配置 Lua 开发环境(清晰明了)_lua vscode-CSDN博客 1.下载 Lua Binaries Download (sourceforge.net) 2.配置环境变量 解压放到某文件夹: 环境变量: 3.VSCode安装插件 4.配置 5.测试

【C语言刷题系列】求一个数组中两个元素a和b的和最接近整数m

💓 博客主页:倔强的石头的CSDN主页 📝Gitee主页:倔强的石头的gitee主页 ⏩ 文章专栏:C语言刷题系列 目录 一、问题描述 二、解题思路 解题思路: 解题步骤: 三、C语言代码实现及测试 一、问题描述 给定一…

全栈式数据统计:SqlAlchemy怎样连接MsSql Server获取视图列表

1.源代码 #-----------获取数据库视图列表----------------------------- # -------密码含特殊字符使用 from urllib.parse import quote_plus as urlquotefrom sqlalchemy import create_engine, MetaData, inspect# 替换为你的数据库连接字符串 DRIVER "ODBC Driver 1…

数组序号Spinner

使用Spnner代替编辑框&#xff0c;只能选择已有的&#xff0c;不会越界&#xff0c;大大简化了代码。 String[] SA new String[list.size()]; for (int i0; i<SA.length; i) {SA[i] String.valueOf(i); } ArrayAdapter<String> adapter1 new ArrayAdapter<>(…

【2024软考】史上最全!软考刷题+解析大合集(9万字全手工打,货真价实)

计算机基础知识 1.中断向量表用来保存各个中断源的中断服务程序的入口地址。当外设发出中断请求信号&#xff08;INTR&#xff09;以后&#xff0c;由中断控制器&#xff08;INTC&#xff09;确定其中断号&#xff0c;并根据中断号查找中断向量表来取得其中断服务程序的入口地…

读论文 | Small object detection model for UAV aerial image based on YOLOv7

目录 1、前言 2、摘要 3、论文的方法 3.1 方法描述 3.2 方法改进 3.3 本论文的模型图 3.4 本文的数据集&#xff1a; 3.5 论文实验 3.6 解决的问题 3.7 论文总结 &#xff08;1&#xff09;文章优点 &#xff08;2&#xff09;方法创新点 &#xff08;3&#xff0…

基于Tensorflow卷积神经网络人脸识别公寓人员进出管理系统

欢迎大家点赞、收藏、关注、评论啦 &#xff0c;由于篇幅有限&#xff0c;只展示了部分核心代码。 文章目录 一项目简介 二、功能三、系统四. 总结 一项目简介 一、项目背景与意义 随着科技的快速发展和智能化水平的提高&#xff0c;公寓管理面临着越来越多的挑战。传统的公寓…

Django 安装步骤

步骤如下 打开cmd输入命令行 pip install django上图代表已经安装好了。但是里面的warning必须得将路径弄好&#xff0c;不然是运行不了 创建django项目 去到VS Code里&#xff0c;进入Terminal 页面&#xff0c;运行下面的命令 django-admin startproject [自己项目名称]就…

基于地理坐标的高阶几何编辑工具算法(4)——线分割面

文章目录 工具步骤应用场景算法输入算法输出算法示意图算法原理 工具步骤 选中待分割面&#xff0c;点击“线分割面”工具&#xff0c;绘制和面至少两个交点的线&#xff0c;双击结束&#xff0c;执行分割操作 应用场景 快速切分大型几何面&#xff0c;以降低面的复杂度&…

Scrapy顺序执行多个爬虫

Scrapy顺序执行多个爬虫 有两种方式&#xff1a; 第一种&#xff1a;bat方式运行 新建bat文件 cd C:\python_web\spiders\tiktokSelenium & C: & scrapy crawl spider1 & scrapy crawl spider2 & scrapy crawl spider3 & scrapy crawl spider4 第二种&a…

小猪APP分发:一站式托管服务,轻松玩转应用市场

在当今移动应用爆炸式增长的时代&#xff0c;开发者们面临的挑战不再仅限于创意的火花和代码的实现&#xff0c;更在于如何让精心打造的应用快速触达广大用户。这正是小猪APP分发www.appzhu.net应运而生的背景——作为一个全面、高效的APP托管服务分发平台&#xff0c;它为开发…

解决docker中container运行闪退终止的问题

在运行bindmount-test时&#xff0c;点击完运行按钮后闪退结束运行。 第一步查看log日志&#xff1a; 2024-05-18 23:46:18 Error: Cannot find module /app/nodemon 2024-05-18 23:46:18 at Function.Module._resolveFilename (internal/modules/cjs/loader.js:668:15) …

【Kafka】消息的顺序性、可靠性、幂等性

目录 消息顺序性消息可靠性生产者丢失消息消费者丢失消息Kafka丢失消息 消息幂等性 消息顺序性 消息追加到partition尾部&#xff0c;单个partition是有序的&#xff0c;但多个partition如何进行有序的获取一些消息&#xff1f; 解决方案 一个topic只设置一个partition&…

驱动执行报“Attribute var: Invalid permissions 0665”

问题&#xff1a;执行驱动的时候会报下面这个错误 WARNING: CPU: 0 PID: 123 at fs/sysfs/group.c:61 internal_create_group0x170/0x264() Attribute var: Invalid permissions 0665 问题分析&#xff1a;查看 fs/sysfs/group.c:61的代码&#xff0c;发现是我设置 module_par…

【C语言】C语言-学生成绩管理系统(源码+数据文件+课程论文)【独一无二】

&#x1f449;博__主&#x1f448;&#xff1a;米码收割机 &#x1f449;技__能&#x1f448;&#xff1a;C/Python语言 &#x1f449;公众号&#x1f448;&#xff1a;测试开发自动化【获取源码商业合作】 &#x1f449;荣__誉&#x1f448;&#xff1a;阿里云博客专家博主、5…