当前位置: 首页 > news >正文

django restful API


文章目录

  • 项目地址
  • 一、django环境安装以及初识restful
    • 1.1 安装python 3.10的虚拟环境
    • 1.2 创建django工程文件
    • 1.3 创建一个book app
    • 1.4 序列化(Django JsonResponse)
      • 1.4.1创建一个Models
      • 1.4.2 创建django的超级用户admin
      • 1.4.3 添加serializers.py生成序列化器
    • 1.5 FBV创建视图
      • 1.5.1 在app里创建django 视图
      • 1.5.2创建app的urls路由
      • 1.5.3 将app的路由注册到项目的路由
      • 1.5.4 整体流程梳理
      • 1.5.5 创建一个可以通过传递id来get/post
      • 1.5.6 使用restful风格改写views
    • 1.6 CBV
      • 1.6.1 使用restful的APIView类来创建
  • 二、Django restful组件研究
    • 2.1 APIView的主要作用
    • 2.1 序列化器serializer
      • 2.1.1 创建一个Book模型类
      • 2.1.2 设计book类的序列化器
      • 2.1.3 设计view,get/post请求
      • 2.1.4 将视图view添加到project路由里
      • 2.1.5 项目结构
      • 2.1.6 对单个对象进行操作
    • 2.2 使用ModelSerializer
    • 2.3 GenericAPIView 实现增删改查
      • 2.4.1 创建多个Models


项目地址

第一章:

  • 教程作者:Codingstrade
  • 教程地址:
https://www.CSDN.com/watch?v=z6WudaByH1k&t=120s
  • 代码仓库地址:
  • 所用到的框架和插件:
django
djangorestfui
  • 插件
django 
thunder client
sqlite view

第二章:
课程i地址:

https://www.bilibili.com/video/BV1z5411D7BQ?spm_id_from=333.788.videopod.episodes&vd_source=791e6deaa9c8a56b1f845a0bc1431b71&p=17

一、django环境安装以及初识restful

1.1 安装python 3.10的虚拟环境

  1. pipenv 安装指定版本的python
pipenv --python 3.10
  • 另外一种方法
python3.10 -m venv venv
  1. 运行虚拟环境
pipenv shell
  • 另一种方法
.\venv\Scripts\activate

在这里插入图片描述

  1. 安装django
pipenv install django
  • 安装所有的包requirements.txt
django>=4.0.0,<4.1.0
djangorestframework
pyyaml
requests
django-cors-headers
  • 安装
pip install -r requirements.txt

1.2 创建django工程文件

  1. 创建项目myapi是项目的名称
django-admin startproject myapi
  1. 查看文件
    在这里插入图片描述

  2. 运行django,默认localhost:8000

py manage.py runserver 

在这里插入图片描述

1.3 创建一个book app

  1. 控制台输入
py manage.py startapp book 
  1. 成功后,文件夹目录
    在这里插入图片描述

  2. 注册APP到django里
    在这里插入图片描述

1.4 序列化(Django JsonResponse)

将数据库内容 转为python的格式

1.4.1创建一个Models

  1. api/models.py里创建
from django.db import models# Create your models here.
class Post(models.Model):title = models.CharField(max_length=120)author = models.CharField(max_length=120)email = models.EmailField( default='')
  1. 注册Models
python manage.py makemigrations
  1. 创建models表
python manage.py miggrate
  1. res_api/admin.py注册我们的Models
admin.site.register(Post)

1.4.2 创建django的超级用户admin

  1. 创建超级用户
python manage.py createsuperuser
  1. 创建完成之后登录到
http://127.0.0.1:8000/admin/

在这里插入图片描述

  1. 成功之后在post里添加一个用户,用于我们将来的测试

1.4.3 添加serializers.py生成序列化器

  1. serializers.py文件里添加
from rest_framework import serializers
from .models import Post    class PostSerializer(serializers.ModelSerializer):class Meta:model = Postfields = ['title', 'author', 'email']

1.5 FBV创建视图

  • 该模式下,不管是django原生,还是restful风格,都是函数式编程

1.5.1 在app里创建django 视图

  1. 创建res_api/views.py
from django.shortcuts import render
from .models import Post
from .serializers import PostSerializer
from django.http import JsonResponse
from rest_framework.parsers import JSONParser
from django.views.decorators.csrf import csrf_exempt #测试postman使用# Create your views here.
@csrf_exempt
def PostsView(request):if request.method == 'GET':posts = Post.objects.all()serializer = PostSerializer(posts, many=True)return JsonResponse(serializer.data, safe=False)elif request.method == 'POST':post_data = JSONParser().parse(request)serializer = PostSerializer(data=post_data)if serializer.is_valid():serializer.save()return JsonResponse(serializer.data, status=201)return JsonResponse(serializer.errors, status=400)

1.5.2创建app的urls路由

1.创建res_api/urls.py:注意,这里的只是app的路由 ,并不是项目的路由,

from django.urls import path
from .views import PostsViewurlpatterns = [path('posts/', PostsView),
]

1.5.3 将app的路由注册到项目的路由

1.drf/urls.py里添加


from django.contrib import admin
from django.urls import path,includeurlpatterns = [path('admin/', admin.site.urls),path('', include('res_api.urls')),
]

1.5.4 整体流程梳理

  1. 在app里创建models,这个models一般对应的数据库里的数据res_api/models.py,使得python可以从数据库里取数
  2. 创建完之后,将models在app的admin下面注册res_api/admin.py,让django知道这个models模型
  3. 序列化Models,res_api/serializers.py,这里一般就是对表中的字段进行序列化
  4. 序列化完整之后需要构建view,res_api/views.py,这里的功能是告诉django如何取到models序列化好的数据,怎么取,以什么方式来取
  5. 注册app自己的路由res_api/views.py,告诉django 该app的models通过什么字段能访问
  6. 将app的路由注册到project里,这样浏览器就可以通过项目的地址+app里定义的字段访问到我们的models数据
  • 至此,有个bug就是post的提交方式是和get一样,我们需要将他改为posts的方式

1.5.5 创建一个可以通过传递id来get/post

  1. rest_aip/views.py添加一个新的函数,用来处理传递的id
@csrf_exempt    
def postuser_by_id(request, pk):try:post = PostUsers.objects.get(pk=pk)except PostUsers.DoesNotExist:return HttpResponse(status=404)if request.method == 'GET':serializer = PostSerializer(post)return JsonResponse(serializer.data)elif request.method == 'PUT':post_data = JSONParser().parse(request)serializer = PostSerializer(post, data=post_data)if serializer.is_valid():serializer.save()return JsonResponse(serializer.data)return JsonResponse(serializer.errors, status=400)elif request.method == 'DELETE':post.delete()return HttpResponse(status=204)
  1. 将我们的函数,注册到我们的app的urls里,res_api/urls.py
urlpatterns = [path('postusers/', PostUsersView), path('detials/<int:pk>', postuser_by_id),  # using <int:pk> to get the id of the post
]
  1. 测试,成功

1.5.6 使用restful风格改写views

  1. 修改res_api/views.py
from django.shortcuts import render
from .models import PostUsers
from .serializers import PostSerializer
from rest_framework.decorators import api_view
from rest_framework.response import Response
from rest_framework import status@api_view(['GET', 'POST'])
def PostUsersView(request):if request.method == 'GET':posts = PostUsers.objects.all() #quertSetserializer = PostSerializer(posts, many=True)return Response(serializer.data)elif request.method == 'POST':serializer = PostSerializer(data=request.data)if serializer.is_valid():serializer.save()return Response(serializer.data, status=status.HTTP_201_CREATED)return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)@api_view(['GET', 'PUT', 'DELETE'])
def postuser_by_id(request,

相关文章:

django restful API

文章目录 项目地址一、django环境安装以及初识restful1.1 安装python 3.10的虚拟环境1.2 创建django工程文件1.3 创建一个book app1.4 序列化(Django JsonResponse)1.4.1创建一个Models1.4.2 创建django的超级用户admin1.4.3 添加serializers.py生成序列化器1.5 FBV创建视图1…...

在xml 中 不等式 做转义处理的问题

对于这种要做转义处理&#xff0c;<![CDATA[ < ]]>...

python——文件存储与写入path

path方法常常用来访问一个文件所在的地址&#xff0c;然后将地址储存在变量中。然后有不同的方法将文件内容进行处理&#xff0c;还可以将文件进行创建。 from pathlib import Path pathPath(xxxxxxx) 1.文件读取操作 (1)txt文件 常用read_text()读取文件内容&#xff0c; …...

AI 提示词(Prompt)入门 :ChatGPT 4.0 高级功能指南

这段时间 GPT4 多了很多功能&#xff0c;今天主要是增加了 GPTs Store 的介绍和 创建 GPTs 的简单方法&#xff0c;那么我们开始吧&#xff0c;文末有彩蛋。 这里主要讲解如下几个点&#xff1a; 1&#xff1a; ChatGPT 4.0 插件的使用 2&#xff1a;ChatGPT 4.0 高级数据分…...

C++:模板

目录​​​​​​​ 一.泛型编程 二.模板 函数模板 类模板 一.泛型编程 在C中&#xff0c;支持函数重载&#xff0c;如果我们通过函数重载实现通用的交换函数&#xff0c;写法如下&#xff1a; void Swap(int& left, int& right) {int temp left;left right;ri…...

假如浙江与福建合并为“浙福省”

在中国&#xff0c;很多省份之间的关系颇有“渊源”&#xff0c;例如河南与河北、湖南与湖北、广东与广西等等&#xff0c;他们因一山或一湖之隔&#xff0c;地域相近、文化相通。 但有这么两个省份&#xff0c;省名没有共通之处&#xff0c;文化上也有诸多不同&#xff0c;但…...

AI图片生成3D物体和2D视频提取3D动画

包括AI图片生成3D物体的网站&#xff1a; 第一个为Artefacts.AIhttps://app.artefacts.ai/starter 第二个为 https://3d.csm.ai/ 以下4个的视频教程连接https://www.youtube.com/watch?vmQQCyzTA_F8 第三个为Tripo AI: Tripo AI for Web 第四个为Meshy AI: Meshy - Free …...

Android 应用包名的定义 pm list packages查询的包名

问题 在AndroidManifest和build.gradle其实都有应用包名的定义&#xff0c;有时候发现两者不一样&#xff0c;那么最终编译到软件生效的是哪个呢&#xff1f; 现象 连接设备后&#xff0c;通过adb shell pm list packages 查询应用包名&#xff0c;所列的名称是在build.grad…...

递归相关练习

21. 合并两个有序链表 - 力扣&#xff08;LeetCode&#xff09; 重复子问题&#xff1a;将l1的头节点跟l2的头结点比较 得到一个较小的头节点l1 随后继续比较 将l1后面一个节点跟l2第一个节点比较 又得到一个较小的节点 不断下去 递归出口&#xff1a;当l1或者l2为空时候 返回…...

租房市场新动力:基于Spring Boot的管理系统

2相关技术 2.1 MYSQL数据库 MySQL是一个真正的多用户、多线程SQL数据库服务器。 是基于SQL的客户/服务器模式的关系数据库管理系统&#xff0c;它的有点有有功能强大、使用简单、管理方便、安全可靠性高、运行速度快、多线程、跨平台性、完全网络化、稳定性等&#xff0c;非常…...

基于Python的B站视频数据分析与可视化

基于Python的B站视频数据分析与可视化 爬取视频、UP主信息、视频评论 功能列表 关键词搜索指定帖子ID爬取指定UP主的主页爬取支持评论爬取生成评论词云图支持数据存在数据库支持可视化 部分效果演示 爬取的UP主信息 关键词搜索爬取 指定UP主的主页爬取 指定为黑马的了 爬取视…...

远程:HTTP基本身份验证失败。提供的密码或令牌不正确,或者您的账户启用了两步验证,您必须使用个人访问令牌而不是密码。

问题描述&#xff1a; remote: HTTP Basic: Access denied. The provided password or token is incorrect or your account has 2FA enabled and you must use a personal access token insteadof a password. See http://gitlab.cnovit.com/help/topics/git/troubleshooting…...

聚合值和非聚合值比较【SQL】

文章目录 聚合值和非聚合值比较背景可以在HAVING中使用的聚合条件如何实现与非聚合值的比较与非聚合值的特殊比较 聚合值和非聚合值比较 背景 在数据库中&#xff0c;聚合值和非聚合值通常不直接比较&#xff0c;因为它们的上下文和用途不同。聚合值是通过聚合函数计算出来的…...

Python 学习 DAY1

现在我算是发现了&#xff0c;计算机这里就是得一直不停的学&#xff0c;卷完c卷java&#xff0c;卷完java卷python&#xff0c;卷完python卷机器学习、深度学习。《荀子劝学篇》&#xff1a;“君子曰&#xff1a;学不可以已。” 之前一直学python学得比较碎片化&#xff0c;现…...

`Pendulum`: 掌握时间的艺术,让Python日期时间操作不再复杂

文章目录 Pendulum: 掌握时间的艺术&#xff0c;让Python日期时间操作不再复杂第一部分&#xff1a;背景介绍第二部分&#xff1a;Pendulum是什么&#xff1f;第三部分&#xff1a;如何安装Pendulum&#xff1f;第四部分&#xff1a;简单的库函数使用方法now()today()tomorrow(…...

nginx------HTTP模块配置详解

Nginx 的 server 配置块是 Nginx 配置文件中的一个关键部分&#xff0c;用于定义虚拟主机。每个 server 块可以包含多个 location 块和其他指令&#xff0c;以处理特定的请求。下面是对 server 配置块的详细解释&#xff1a; 一 server 配置块的基本结构 http {# 其他全局配置…...

听见文本的魅力:AI 与未来的语音交互

AI 与未来的语音交互 引言什么是文本转语音&#xff08;TTS&#xff09;&#xff1f;当前 TTS 技术现状国内海外文本转语音能力调研文本转语音能力说明多情感风格SSML语音合成标记语言 未来趋势 引言 随着人工智能&#xff08;AI&#xff09;技术的迅猛发展&#xff0c;文本转…...

Qt 窗口可见性 之 close函数和hide函数

close函数 基本功能 close() 方法的主要功能是关闭窗口&#xff0c;并触发一系列与关闭相关的事件和信号。调用此方法后&#xff0c;窗口将不再可见&#xff0c;但窗口对象本身仍然存在&#xff0c;并且可以被再次显示&#xff08;通过调用 show() 方法&#xff09;。 事件处…...

git bisect和git blame

1.用 git bisect 找到出错的commit 设置开始&#xff0c;最新的一个已知的错误的commit和第一个已知的正确的commit&#xff0c;通过二分法&#xff0c;找出第一个出错的commit。 二分查找法&#xff08;binary search method&#xff09;或二分法&#xff08;bisection meth…...

【面试题】Node.JS篇

1. 什么是Node.js?它的主要特点是什么?适用于哪些场景? Node.js 是一个基于Chrome V8引擎的JavaScript运行时环境&#xff0c;它允许JavaScript代码在服务器端运行。Node.js的主要特点是事件驱动、非阻塞I/O模型&#xff0c;这使得它非常适合处理高并发请求和实时应用。它适…...

进程地址空间(比特课总结)

一、进程地址空间 1. 环境变量 1 &#xff09;⽤户级环境变量与系统级环境变量 全局属性&#xff1a;环境变量具有全局属性&#xff0c;会被⼦进程继承。例如当bash启动⼦进程时&#xff0c;环 境变量会⾃动传递给⼦进程。 本地变量限制&#xff1a;本地变量只在当前进程(ba…...

【人工智能】神经网络的优化器optimizer(二):Adagrad自适应学习率优化器

一.自适应梯度算法Adagrad概述 Adagrad&#xff08;Adaptive Gradient Algorithm&#xff09;是一种自适应学习率的优化算法&#xff0c;由Duchi等人在2011年提出。其核心思想是针对不同参数自动调整学习率&#xff0c;适合处理稀疏数据和不同参数梯度差异较大的场景。Adagrad通…...

基于Flask实现的医疗保险欺诈识别监测模型

基于Flask实现的医疗保险欺诈识别监测模型 项目截图 项目简介 社会医疗保险是国家通过立法形式强制实施&#xff0c;由雇主和个人按一定比例缴纳保险费&#xff0c;建立社会医疗保险基金&#xff0c;支付雇员医疗费用的一种医疗保险制度&#xff0c; 它是促进社会文明和进步的…...

1688商品列表API与其他数据源的对接思路

将1688商品列表API与其他数据源对接时&#xff0c;需结合业务场景设计数据流转链路&#xff0c;重点关注数据格式兼容性、接口调用频率控制及数据一致性维护。以下是具体对接思路及关键技术点&#xff1a; 一、核心对接场景与目标 商品数据同步 场景&#xff1a;将1688商品信息…...

学校招生小程序源码介绍

基于ThinkPHPFastAdminUniApp开发的学校招生小程序源码&#xff0c;专为学校招生场景量身打造&#xff0c;功能实用且操作便捷。 从技术架构来看&#xff0c;ThinkPHP提供稳定可靠的后台服务&#xff0c;FastAdmin加速开发流程&#xff0c;UniApp则保障小程序在多端有良好的兼…...

ESP32 I2S音频总线学习笔记(四): INMP441采集音频并实时播放

简介 前面两期文章我们介绍了I2S的读取和写入&#xff0c;一个是通过INMP441麦克风模块采集音频&#xff0c;一个是通过PCM5102A模块播放音频&#xff0c;那如果我们将两者结合起来&#xff0c;将麦克风采集到的音频通过PCM5102A播放&#xff0c;是不是就可以做一个扩音器了呢…...

CRMEB 框架中 PHP 上传扩展开发:涵盖本地上传及阿里云 OSS、腾讯云 COS、七牛云

目前已有本地上传、阿里云OSS上传、腾讯云COS上传、七牛云上传扩展 扩展入口文件 文件目录 crmeb\services\upload\Upload.php namespace crmeb\services\upload;use crmeb\basic\BaseManager; use think\facade\Config;/*** Class Upload* package crmeb\services\upload* …...

在web-view 加载的本地及远程HTML中调用uniapp的API及网页和vue页面是如何通讯的?

uni-app 中 Web-view 与 Vue 页面的通讯机制详解 一、Web-view 简介 Web-view 是 uni-app 提供的一个重要组件&#xff0c;用于在原生应用中加载 HTML 页面&#xff1a; 支持加载本地 HTML 文件支持加载远程 HTML 页面实现 Web 与原生的双向通讯可用于嵌入第三方网页或 H5 应…...

Hive 存储格式深度解析:从 TextFile 到 ORC,如何选对数据存储方案?

在大数据处理领域&#xff0c;Hive 作为 Hadoop 生态中重要的数据仓库工具&#xff0c;其存储格式的选择直接影响数据存储成本、查询效率和计算资源消耗。面对 TextFile、SequenceFile、Parquet、RCFile、ORC 等多种存储格式&#xff0c;很多开发者常常陷入选择困境。本文将从底…...

【Go语言基础【13】】函数、闭包、方法

文章目录 零、概述一、函数基础1、函数基础概念2、参数传递机制3、返回值特性3.1. 多返回值3.2. 命名返回值3.3. 错误处理 二、函数类型与高阶函数1. 函数类型定义2. 高阶函数&#xff08;函数作为参数、返回值&#xff09; 三、匿名函数与闭包1. 匿名函数&#xff08;Lambda函…...