当前位置: 首页 > 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;这使得它非常适合处理高并发请求和实时应用。它适…...

云计算——弹性云计算器(ECS)

弹性云服务器&#xff1a;ECS 概述 云计算重构了ICT系统&#xff0c;云计算平台厂商推出使得厂家能够主要关注应用管理而非平台管理的云平台&#xff0c;包含如下主要概念。 ECS&#xff08;Elastic Cloud Server&#xff09;&#xff1a;即弹性云服务器&#xff0c;是云计算…...

rknn优化教程(二)

文章目录 1. 前述2. 三方库的封装2.1 xrepo中的库2.2 xrepo之外的库2.2.1 opencv2.2.2 rknnrt2.2.3 spdlog 3. rknn_engine库 1. 前述 OK&#xff0c;开始写第二篇的内容了。这篇博客主要能写一下&#xff1a; 如何给一些三方库按照xmake方式进行封装&#xff0c;供调用如何按…...

shell脚本--常见案例

1、自动备份文件或目录 2、批量重命名文件 3、查找并删除指定名称的文件&#xff1a; 4、批量删除文件 5、查找并替换文件内容 6、批量创建文件 7、创建文件夹并移动文件 8、在文件夹中查找文件...

dedecms 织梦自定义表单留言增加ajax验证码功能

增加ajax功能模块&#xff0c;用户不点击提交按钮&#xff0c;只要输入框失去焦点&#xff0c;就会提前提示验证码是否正确。 一&#xff0c;模板上增加验证码 <input name"vdcode"id"vdcode" placeholder"请输入验证码" type"text&quo…...

04-初识css

一、css样式引入 1.1.内部样式 <div style"width: 100px;"></div>1.2.外部样式 1.2.1.外部样式1 <style>.aa {width: 100px;} </style> <div class"aa"></div>1.2.2.外部样式2 <!-- rel内表面引入的是style样…...

Java入门学习详细版(一)

大家好&#xff0c;Java 学习是一个系统学习的过程&#xff0c;核心原则就是“理论 实践 坚持”&#xff0c;并且需循序渐进&#xff0c;不可过于着急&#xff0c;本篇文章推出的这份详细入门学习资料将带大家从零基础开始&#xff0c;逐步掌握 Java 的核心概念和编程技能。 …...

ABAP设计模式之---“简单设计原则(Simple Design)”

“Simple Design”&#xff08;简单设计&#xff09;是软件开发中的一个重要理念&#xff0c;倡导以最简单的方式实现软件功能&#xff0c;以确保代码清晰易懂、易维护&#xff0c;并在项目需求变化时能够快速适应。 其核心目标是避免复杂和过度设计&#xff0c;遵循“让事情保…...

QT3D学习笔记——圆台、圆锥

类名作用Qt3DWindow3D渲染窗口容器QEntity场景中的实体&#xff08;对象或容器&#xff09;QCamera控制观察视角QPointLight点光源QConeMesh圆锥几何网格QTransform控制实体的位置/旋转/缩放QPhongMaterialPhong光照材质&#xff08;定义颜色、反光等&#xff09;QFirstPersonC…...

Python Ovito统计金刚石结构数量

大家好,我是小马老师。 本文介绍python ovito方法统计金刚石结构的方法。 Ovito Identify diamond structure命令可以识别和统计金刚石结构,但是无法直接输出结构的变化情况。 本文使用python调用ovito包的方法,可以持续统计各步的金刚石结构,具体代码如下: from ovito…...

AI语音助手的Python实现

引言 语音助手(如小爱同学、Siri)通过语音识别、自然语言处理(NLP)和语音合成技术,为用户提供直观、高效的交互体验。随着人工智能的普及,Python开发者可以利用开源库和AI模型,快速构建自定义语音助手。本文由浅入深,详细介绍如何使用Python开发AI语音助手,涵盖基础功…...